首页 > 解决方案 > 字典列表中的广播值

问题描述

我想在

lst1=[{'a1':0,'a2':0,'a3':0,'a4':0,'a5':0},
 {'b1':0,'b2':0,'b3':0,'b4':0,'b5':0},
 {'c1':0,'c2':0,'c3':0,'c4':0,'c5':1} 
 ]

如果字典中有 1,那么字典中的所有值都将广播到 1 期望输出为

lst1=[{'a1':0,'a2':0,'a3':0,'a4':0,'a5':0},
 {'b1':0,'b2':0,'b3':0,'b4':0,'b5':0},
 {'c1':1,'c2':1,'c3':1,'c4':1,'c5':1}]

问题是,我们不知道字典的键,'c1' 或 'a1' 将是随机的,但总是知道要搜索字典的最后一个元素,例如我们总是搜索 'a5' 的值,'b5' 或 'c5'。谢谢您的回答

像 Rakesh 回答的魅力一样工作但是我有新的数据结构,我如何解决这个问题

lst1=[[{'a1':'zz','lb':0},{'a2':'zz','lb':0},{'a3':'zz','lb':0}],
 [{'b1':'zz','lb':0},{'b2':'zz','lb':0},{'a3':'zz','lb':0}],
 [{'c1':'zz','lb':0},{'c2':'zzz','lb':0},{'c3':'zz','lb':1}]]

期望的输出

lst1=[[{'a1':'zz','lb':0},{'a2':'zz','lb':0},{'a3':'zz','lb':0}],
 [{'b1':'zz','lb':0},{'b2':'zz','lb':0},{'a3':'zz','lb':0}],
 [{'c1':'zz','lb':1},{'c2':'zzz','lb':1},{'c3':'zz','lb':1}]]

标签: python-3.x

解决方案


这是一种使用列表推导和字典推导的方法。

前任:

lst1=[{'a1':0,'a2':0,'a3':0,'a4':0,'a5':0}, {'b1':0,'b2':0,'b3':0,'b4':0,'b5':0}, {'c1':0,'c2':0,'c3':0,'c4':0,'c5':1}]

print([{k: 1 for k, v in i.items()} if 1 in i.values() else i for i in lst1])

输出:

[{'a1': 0, 'a2': 0, 'a3': 0, 'a4': 0, 'a5': 0},
 {'b1': 0, 'b2': 0, 'b3': 0, 'b4': 0, 'b5': 0},
 {'c1': 1, 'c2': 1, 'c3': 1, 'c4': 1, 'c5': 1}]

根据评论编辑

lst1=[[{'a1':'zz','lb':0},{'a2':'zz','lb':0},{'a3':'zz','lb':0}], [{'b1':'zz','lb':0},{'b2':'zz','lb':0},{'a3':'zz','lb':0}], [{'c1':'zz','lb':0},{'c2':'zzz','lb':0},{'c3':'zz','lb':1}]]
for elem in lst1:
    sync = False
    for i in elem:
        if i['lb'] == 1:
            sync = True
            break
    if sync:
        for i in elem:
            i['lb'] = 1

print(lst1)

输出:

[[{'a1': 'zz', 'lb': 0}, {'a2': 'zz', 'lb': 0}, {'a3': 'zz', 'lb': 0}],
 [{'b1': 'zz', 'lb': 0}, {'b2': 'zz', 'lb': 0}, {'a3': 'zz', 'lb': 0}],
 [{'c1': 'zz', 'lb': 1}, {'c2': 'zzz', 'lb': 1}, {'c3': 'zz', 'lb': 1}]]

推荐阅读