查找与嵌套字典关联的键的python方法

2024-05-17 13:01:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字典,其中每个键都有一个字典作为其值(嵌套字典都有相同的键集)。我试图找到与子键上的两个条件相关联的键:给定另一个子键的子键的最大值为真。在

例如:

d = {'key1' : {'subkey1' : True,  'subkey2' : 4},
     'key2' : {'subkey1' : True,  'subkey2' : 8},
     'key3' : {'subkey1' : False, 'subkey2' : 1},
     'key4' : {'subkey1' : False, 'subkey2' : 9} }

我希望结果是'key2',因为它是'subkey2'的最大值,其中'subkey1'为真。在

我的诱惑是将所有内容放入一个数组中并找到与这些值相关联的索引,但我的印象是,这可以在不添加更多变量来存储相同信息的情况下完成。我觉得可能有更好的方法,因为我对Python比较陌生。在

有什么建议吗?谢谢!在


Tags: 信息falsetrue内容字典数组条件key2
3条回答

您可能需要的是reduce来自functools

以下是您可能要寻找的解决方案:

from functools import reduce
import operator

d = {'key1' : {'subkey1' : True,  'subkey2' : 4},
     'key2' : {'subkey1' : True,  'subkey2' : 8},
     'key3' : {'subkey1' : False, 'subkey2' : 1},
     'key4' : {'subkey1' : False, 'subkey2' : 9} }
maxsum=0
for k in d:
    if reduce(operator.getitem, [k,'subkey1'], d):
        value = (reduce(operator.getitem, [k,'subkey2'], d))
        if maxsum<value:
            maxsum=value
print(maxsum)

基本上,这个reduce(operator.getitem, [k,'subkey1'], d)所做的就是从子字典中获取值。例如:

^{pr2}$

输出:

True

这里reduce遍历John>;Male,得到的结果是True

我们也可以列出清单作为论据。看看这个

from functools import reduce
import operator

d = {'John' : {'Male' : True,  'age' : 41},
         'Vishnu':{'Male':True ,'age':23}}
chklist1 = ['John','Male']
chklist2 = ['Vishnu','age']
print(reduce(operator.getitem, chklist1, d))
print(reduce(operator.getitem, chklist2, d))

输出:

True
23

你不能总是期望这句名言是一句名言,它可以是一句名言,一句名言,一句名言。(谁知道?事情总会发生!)在

from functools import reduce
import operator

d = {
    "John":{
        "Age": 23,
        "Sex": 'M',
        "Country": 'USA'
        },
    "Vishnu":{
        "Age": 1,
        "Country": {
            "India": 'TamilNadu',
            "USA": None,
            "South Africa": None
        }
        }
}
chklist1 = ['John','Age']
chklist2 = ['Vishnu','Country','India']
print(reduce(operator.getitem, chklist1, d))
print(reduce(operator.getitem, chklist2, d))

输出:

23
TamilNadu

现在回到你的问题上来:

for k in d:
    if reduce(operator.getitem, [k,'subkey1'], d):
        value = (reduce(operator.getitem, [k,'subkey2'], d))
        if maxsum<value:
            maxsum=value
print(maxsum)

对于每个键k,这将是您的key1,key2,...等等。首先,reduce(operator.getitem, [k,'subkey1'], d)检查其中包含的值是True还是{}。仅在True时继续

然后将maxsum设置为dict的sub-dict中的第二项。对于每个键,它都会被检查,如果发现另一个值大于当前值,则该值将被更改,否则它将继续。直到找到可以打印出来的最大值。在

这是问题的可选实现。在

首先,用True过滤所有的subkey1。在

其次,从过滤字典中找到subkey2中的最大值。在

d = {'key1' : {'subkey1' : True,  'subkey2' : 4},
     'key2' : {'subkey1' : True,  'subkey2' : 8},
     'key3' : {'subkey1' : False, 'subkey2' : 1},
     'key4' : {'subkey1' : False, 'subkey2' : 9} }

max_d = {v["subkey2"]:{k:v} for k,v in d.items() if v["subkey1"]} # create new dictionary that the key is the value from subkey2 and the value is the original key and value.
max_int = max(max_d.keys(), key=int) # get the max key

print (max_d[max_int]) # print the maximum 

>>> {'key2': {'subkey1': True, 'subkey2': 8}}

这有点复杂,但是这个呢:

print(d[max({key:d[key] for key in [k for k in d.keys() if d[k]['subkey1'] is True]})])

首先,我们列出一个主键列表,这些主键的subkey1为True,然后为每个主键重建一个键值对词典,并获取具有最大值的键

还没有完全测试这个,所以请在你的一端做,如果你认为值得的时间。在

相关问题 更多 >