[英]Make a 2-tuple list from a dictionary using a generator or comprehension?
從字典看起來像:
newdict = {'1':{'label':'10232'},'2':{'label':'2420'},'3':{'label':'3530'},...}
如何創建以下元組列表?
newlist = [(1,10232),(2,2420),(3,3530)]
我認為我的列表理解不正確:
[newlist(k,k['label']) for (k,v) in newdict.items()]
這有效:
newlist = [(k,v['label']) for (k,v) in newdict.items()]
這是一個完全可重現的例子:
>>> newdict = {'1':{'label':'10232'},'2':{'label':'2420'},'3':{'label':'3530'}}
>>> newlist = [(k,v['label']) for (k,v) in newdict.items()]
>>> newlist
[('1', '10232'), ('3', '3530'), ('2', '2420')]
>>>
如果您希望元組為int,則只需將值轉換為int,如下所示:
>>> newlist = [(int(k),int(v['label'])) for (k,v) in newdict.items()]
>>> newlist
[(1, 10232), (3, 3530), (2, 2420)]
>>>
newdict.items()
是一個迭代器,雖然是字典的(鍵,值)對的列表。 所以,你的第一個錯誤是試圖訪問label
的關鍵k['label']
而不是在價值訪問它v['label']
第二個問題是,你試圖調用列表newlist
,如果它是一個功能newlist(k,k['label'])
newlist
只是一個變量,您可以將結果列表分配給它。
您不需要調用newlist
,您可以使用v
訪問該子目錄:
>>> [(k, v['label']) for (k,v) in newdict.items()]
[('3', '3530'), ('2', '2420'), ('1', '10232')]
但是字典是無序的,因此如果您計划按鍵排序,則必須使用已sorted
:
>>> [(k, v['label']) for (k,v) in sorted(newdict.items())]
[('1', '10232'), ('2', '2420'), ('3', '3530')]
或使用OrderedDict
而不是普通的dict作為newdict
:
>>> from collections import OrderedDict
>>> newdict = OrderedDict([('1', {'label':'10232'}), ('2',{'label':'2420'}), ('3',{'label':'3530'})])
>>> [(k, v['label']) for (k,v) in newdict.items()]
[('1', '10232'), ('2', '2420'), ('3', '3530')]
>>> newlist = [(k,v['label']) for (k,v) in newdict.items()]
>>> newlist
[('1', '10232'), ('3', '3530'), ('2', '2420')]
如果你還想要整數,你必須添加int():
newlist = [(int(k),int(v['label'])) for (k,v) in newdict.items()]
你可以試試這個:
newdict = {'1':{'label':'10232'},'2':{'label':'2420'},'3':{'label':'3530'},...}
final_dict = [(a, list(b.items())[-1][-1]) for a, b in newdict.items()]
輸出:
[('1', '10232'), ('3', '3530'), ('2', '2420')]
嘗試:
>>> newdict = {'1':{'label':'10232'},'2':{'label':'2420'},'3':{'label':'3530'}}
>>> [(int(k),int(v['label'])) for k,v in newdict.items()]
[(1, 10232), (2, 2420), (3, 3530)]
>>>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.