簡體   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