上下文: 我使用Ajax调用从python模块返回一些复杂的JSON。我必须使用一个键列表,并确认单项dicts列表包含每个键的dict。
示例:
mylist=['this', 'that', 'these', 'those']
mydictlist=[{'this':1},{'that':2},{'these':3}]
我怎么知道mydictlist缺少"那些"键?一旦我知道了,我就可以将{'那些' 4}添加到mylist中。只需检查"那些"由于列表是动态的,因此无法工作。数据结构不能改变。
感谢。
答案 0 :(得分:2)
简单的代码是将搜索列表转换为集合,然后使用差异来确定您缺少的内容:
missing = set(mylist).difference(*mydictlist)
可以获得missing
的{{1}}。
由于命名的{'those'}
方法可以采用多个参数(并且它们本身不需要set
),因此您可以将所有set
作为参数解包为{{1} }一次从dict
个所需的键中减去所有这些键。
如果您确实需要处理重复项(为了确保您在difference
的密钥中至少看到set
keys
中的每一个mylist
,那么{{1}可能包含两次必须在mydictlist
s中出现两次的值),您可以使用mylist
和dict
来获取剩余计数:
collections
答案 1 :(得分:0)
最直接的方法是迭代两个容器并检查:
for key in mylist:
if not any(key in dic for dic in mydictlist):
print key, "missing"
但是,如果你有很多键和/或词典,这不会有效:它会为mydictlist
中的每个元素迭代mylist
一次,即O(n *米)。相反,请考虑设置操作:
print set(mylist).difference(*mydictlist)
答案 2 :(得分:0)
pandas包是处理dicts问题列表的好方法。它接受所有键并使它们成为列标题,具有相似键的值填充在同一列中。
检查出来:
import pandas as pd
mydictlist=[{'this':1},{'that':2},{'these':3}]
# Convert data to a DataFrame
df = pd.DataFrame(mydictlist)
# List all the column header names and check if any of the key words are missing
df.columns