如何减少字典列表

How do I reduce list of dictionaries

我在 python 中有一个词典列表。例如

mylist = [
    {'a': 'x', 'b':'y', 'c':'z'},
    {'a':'e','b':'f','c':'g'},
    {'a':'h','b':'i','c':'j'}
]

我如何将其映射到

mynewlist = [
    {'a':'x'},
    {'a','e'},
    {'a':'h'}
]

mynewlist2 = [
    {'a':'x','b':'y'},
    {'a','e','b':'f'},
    {'a':'h','b':'i'}
]

您可以使用列表理解来执行此操作:

mynewlist = [{'a': item['a']} for item in mylist]

循环列表并从字典中获取 a 值。对于 mynewlist2,只需做同样的事情,但有 2 个值:

mynewlist2 = [{'a': item['a'], 'b': item['b']} for item in mylist]

像下面这样的东西应该可以解决问题。请注意,这只会保留 trunc_size 个嵌套字典。不特定于条目 ab。目前还不清楚需要哪个,但如果您的字典中的键发生变化,目前关于此问题的两个答案将产生不同的结果。

def truncate_nested_dicts(list_of_dicts, trunc_size):
    outlist = []
    outdict = {}
    for d in list_of_dicts:
        for k,v in list(d.items())[:trunc_size]:
            outdict[k]=v
        outlist.append(outdict)
        outdict={}
    return outlist

print(truncate_nested_dicts(mylist, 2)) 
>>>[{'a': 'x', 'b': 'y'}, {'a': 'e', 'b': 'f'}, {'a': 'h', 'b': 'i'}]