【问题标题】:Python 3 filter list of ordered dict items by a specific key valuePython 3 按特定键值过滤有序 dict 项的列表
【发布时间】:2020-07-15 20:14:20
【问题描述】:

我正在将其他列表变量的列表迭代到有序字典变量并将它们附加到新的列表变量中。我正在尝试过滤新的有序 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 的其他潜在值可能为空白或无。

【问题讨论】:

  • 你能给我们举个例子来说明 var1-8 是什么吗?输出的一个例子也会有所帮助
  • 如果b[8]不是'C'怎么办?
  • 发布有关产生异常的代码的问题时,请始终包含完整的 Traceback - 复制并粘贴它,然后将其格式化为代码(选择它并输入 ctrl-k)...依赖数据的代码,重要的是在您的问题中包含数据的最小示例。您越容易让 我们 从您的问题中复制和粘贴(以便我们可以执行您的代码并测试我们的解决方案),您就越有可能获得回复。 - 请阅读minimal reproducible example
  • 我正在编辑我的问题以提供更多上下文。

标签: python python-3.x ordereddictionary


【解决方案1】:

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

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-31
    • 1970-01-01
    • 2021-05-23
    • 1970-01-01
    • 2016-09-12
    相关资源
    最近更新 更多