从字典看起来像:
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()]
答案 0 :(得分:5)
这有效:
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
只是一个变量,您可以将结果列表分配给它。
答案 1 :(得分:2)
您不需要致电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
代替普通字典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')]
答案 2 :(得分:1)
>>> 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()]
答案 3 :(得分:0)
你可以试试这个:
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')]
答案 4 :(得分:0)
尝试:
>>> 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)]
>>>