簡體   English   中英

Python:嵌套列表和字典比較

[英]Python: nested list and dictionary comparison

我在將嵌套列表與多個值的字典進行比較時遇到麻煩。 字典和嵌套列表如下所示:

list = [[['a']], [['b']], [['c'], ['d']], [['e'], ['f'], ['g']]]

dict = {'adv0' : ('a', 'b'), 'adv1' : ('f', 'c'), 'adv2' : ('d', 'e', 'q')}

我想創建一個數組,將每個子列表(“ a”,“ b”,“ c&d”,“ e&f&g”)與每個值進行比較,如果子列表中的任何項目是該值的成員它創建0條目,否則創建1條目。

[0,1,1]因為'a'僅在adv0中,[0,1,1]因為'b'僅在adv0中,[1,0,0]因為adv1和adv2包含'c'或'd ',[1、0、0],因為adv1和adv2包含“ e”,“ f”或“ g”之一。 因此,我們得到數組[0,1,1,0,1,1,1,0,0,1,0,0]。

以下代碼是我無法解決的可怕嘗試:

l = []
for sublist in list:
      for items in sublist:
        for x in items:
          for key in dict:
            if x in dict[key]:
              l.extend('0')
            elif x not in dict[key]:
              l.extend('1')
print l

一個問題是字典是無序的,因此您可能無法按預期迭代鍵。 使用OrderedDict或通過所需的鍵專門進行迭代。 這有效:

L = [[['a']], [['b']], [['c'], ['d']], [['e'], ['f'], ['g']]]
D = {'adv0' : ('a', 'b'), 'adv1' : ('f', 'c'), 'adv2' : ('d', 'e', 'q')}

l = []
for sublist in L:
    for key in ('adv0','adv1','adv2'):
        if any(item[0] in D[key] for item in sublist):
            l.append(0) # changed to give explicit output you listed.
        else:
            l.append(1) # ditto
print l

輸出:

[0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0]

您可以執行以下操作:(我將輸入重命名為lst和dct以避免與內置listdict對象沖突)

[0 if any(v[0] in dct[k] for v in sublst) else 1 
   for sublst in lst 
     for k in sorted(dct.keys())]

那很有趣。 (但是,可惜的是,遲到了3分鍾……)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM