gpt4 book ai didi

python - 查找每个具有不确定数量的已定义键的所有词典

转载 作者:行者123 更新时间:2023-11-28 21:27:58 25 4
gpt4 key购买 nike

我有很多不同项目的信息。每个项目都有自己的字典,里面装满了关于该项目的信息,我有一个更大的字典,其中存储了每个项目。但是,我对每个项目都没有完全相同的信息。例如,假设我的商品是水果。然后结构如下:

fruit = {}
fruit['apple'] = {'color': 'red', 'origin': 'Washington'}
fruit['banana'] = {'color': 'yellow'}
fruit['orange'] = {'color': 'orange', 'origin': 'Florida'}

如果我想找到已定义的每个水果的原产地,我将执行以下操作:

fruits, origins = zip(* [(f, fruit[f]['origin']) for f in fruit.keys() if 'origin' in fruit[f]])

这很好用。一旦我想找到每个都定义了颜色和来源的水果,它就开始变得丑陋。

fruits, origins, colors = zip(* [(f, fruit[f]['origin'], fruit[f]['color']) for f in fruit.keys() if 'origin' in fruit[f] and 'color' in fruit[f]])

我想做的是能够编写一个通用函数来对任意数量的指定键执行此操作。也就是说,我可以调用一些名为“已定义”的函数,该函数将接受字典的字典和子字典中的键或键列表,并返回所有对每个键都有定义的子字典,以及每个键的值。

fruits, origins = defined(fruit, ['origin'])
fruits, origins, colors = defined(fruit, ['origin', 'color'])

我查看了各种现有线程,其中包含有关从字典中取出或放入字典的键/值对的问题,但我没有找到任何看起来正确的东西。是否有一种相当简单的方法来概括这一点?

或者,如果人们也想告诉我应该以完全不同的方式组织数据,我也很欢迎。我最初选择了字典中的字典,因为每个项目的可用信息范围很广。比如有的子词典有几十个条目的信息,有的条目只有几个条目(就是'apple'字典有很多信息,但我在'kumquat'中存储的不多)。

最佳答案

您可以通过列表理解概括值提取,通过all概括序列:

def defined(dct, keys):
return zip(*[([k] + [v[m] for m in keys])
for k, v in dct.iteritems()
if all(m in v for m in keys)])

关于python - 查找每个具有不确定数量的已定义键的所有词典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9369923/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com