确保dicts列表中有一个dict,其中包含列表

时间:2016-09-01 01:05:29

标签: python

上下文: 我使用Ajax调用从python模块返回一些复杂的JSON。我必须使用一个键列表,并确认单项dicts列表包含每个键的dict。

示例:

mylist=['this', 'that', 'these', 'those']

mydictlist=[{'this':1},{'that':2},{'these':3}]

我怎么知道mydictlist缺少"那些"键?一旦我知道了,我就可以将{'那些' 4}添加到mylist中。只需检查"那些"由于列表是动态的,因此无法工作。数据结构不能改变。

感谢。

3 个答案:

答案 0 :(得分:2)

简单的代码是将搜索列表转换为集合,然后使用差异来确定您缺少的内容:

missing = set(mylist).difference(*mydictlist)

可以获得missing的{​​{1}}。

由于命名的{'those'}方法可以采用多个参数(并且它们本身不需要set),因此您可以将所有set作为参数解包为{{1} }一次从dict个所需的键中减去所有这些键。

如果您确实需要处理重复项(为了确保您在difference的密钥中至少看到set keys中的每一个mylist,那么{{1}可能包含两次必须在mydictlist s中出现两次的值),您可以使用mylistdict来获取剩余计数:

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