簡體   English   中英

從字典創建元組列表?

[英]Create list of tuples from dictionary?

我有一個簡單的字典:

{"keyy":{"key": "value", "cey": "value"}, "kaye":{"key": "value"}}

我想編碼為“上下文感知”元組:

[("keyy","key","value"), ("keyy","cey","value"), ("kaye","key","value")]

我對ValueError的嘗試:太多值無法解包

if __name__=='__main__':
    mydict={"keyy":{"key": "value", "cey": "value"}, "kaye":{"key", "value"}}
    mytuplelist=[tuple(k,v,val) for (k,v) in [(key,val) for (key,val) in mydict]]
    print mytuplelist

我將如何創建此元組列表?

使用列表理解:

mydict={"keyy":{"key": "value", "cey": "value"}, "kaye":{"key": "value"}}

mytuplelist=[(key,y,mydict[key][y]) for key in mydict for y in mydict[key]]

print (mytuplelist)

輸出:

[('keyy', 'cey', 'value'), ('keyy', 'key', 'value'), ('kaye', 'key', 'value')]

使用簡單的For-In循環:

dic={"keyy":{"key": "value", "cey": "value"}, "kaye":{"key": "value"}}
lis=[]
for x in dic:
  for y in dic[x]:
      lis.append((x,y,dic[x][y]))
print(lis)

輸出:

[('keyy', 'cey', 'value'), ('keyy', 'key', 'value'), ('kaye', 'key', 'value')]

我喜歡一個發電機:

mydict = {"keyy":{"key": "value", "cey": "value"}, "kaye":{"key": "value"}}

def unnest(d):
   for outerkey in d.iterkeys():
       for innerkey, value in d[outerkey].iteritems():
           yield outerkey, innerkey, value

mytuplelist = list(unnest(mydict))

或者,您當然可以將其放入列表理解中:

mytuplelist = [(outerkey, innerkey, value) for outerkey in mydict.iterkeys() 
               for (innerkey, value) in mydict[outerkey].iteritems()]

以下示例將按照您的指示創建元組列表:

mydict = {"keyy":{"key": "value", "cey": "value"}, "kaye":{"key": "value"}}
tuplelist = []
for outer, dct in mydict.iteritems():
    tuplelist.extend((outer, key, val) for key, val in dct.iteritems())

要修復您的代碼:

mydict={"keyy":{"key": "value", "cey": "value"}, "kaye":{"key" : "value"}}
mytuplelist = [(outer, inner, val) for outer, d in mydict.iteritems() 
          for inner, val in d.iteritems()]
print mytuplelist

參見kindall的有關如何通過簡單方法進行此操作的答案:)

通過更正拼寫錯誤(缺少:在最后一個嵌套字典中,這是“太多項目無法拆包”的可能原因之一),您可以重新獲得列表的理解:

dict1 = {"keyy":{"key": "value", "cey": "value"}, "kaye":{"key": "value"}}

print [(key1, key2, dict1[key1][key2]) for key1 in dict1 for key2 in dict1[key1]]

使用列表理解

>>> D={"keyy":{"key": "value", "cey": "value"}, "kaye":{"key": "value"}}
>>> [(i,)+j for i in D for j in D[i].iteritems()]
[('keyy', 'cey', 'value'), ('keyy', 'key', 'value'), ('kaye', 'key', 'value')]

暫無
暫無

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

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