繁体   English   中英

Python 3 按特定键值过滤有序dict项的列表

[英]Python 3 filter list of ordered dict items by a specific key value

我将其他列表变量的列表迭代到有序字典变量并将它们附加到新的列表变量中。 我正在尝试过滤新的有序 dict 条目以仅获得列表中变量 8 等于“C”的结果。 我下面的代码给了我一个值错误。

    keys = ['key1', 'key2', 'key3', 'key4', 'key5', 'key6', 'key7', 'key8']
    blank_list = []
    for a in list(zip(var1, var2, var3, var4, var5, var6, var7, var8):
        orglist = OrderedDict(zip(keys, a))
        orglist2 = {a: b for a, b in orglist if b[8] == 'C'}
        blank_list.append(orglist2)

如何解决此问题以仅检索 var8 等于特定值('C')的有序字典值? 结果应该是有序 dict 对象的列表,其中 var8 等于“C”,而不管其他变量等于什么。 var8 的其他潜在值可能为空白或无。

如果你想保持你的方法,这应该解决它:

keys = ['key1', 'key2', 'key3', 'key4', 'key5', 'key6', 'key7', 'key8']
blank_list = []
for a in zip(var1, var2, var3, var4, var5, var6, var7, var8):
    orglist = OrderedDict(zip(keys, a))
    orglist2 = {a: b for a, b in orglist.items() if b[6] == 'C'}
    blank_list.append(orglist2)

您的问题是, for a, b in orglist不起作用,因为遍历字典只会为您提供字典键。

但也许这会更具可读性:

for a in zip(var1, var2, var3, var4, var5, var6, var7, var8):
    if a[6] == 'C':
        blank_list.append(dict(zip(keys, a)))

或者

for a in zip(var1, var2, var3, var4, var5, var6, var7, var8):
    orglist = OrderedDict(zip(keys, a))
    if orglist['key7'] == 'C':
        blank_list.append(orglist)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM