从看起来像这样的字典:
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()
是一个遍历字典(键,值)对列表的迭代器。因此,您的第一个错误是尝试访问键 k['label']
中的 label
而不是在值 v['label']< 中访问它
。
第二个问题是您试图调用列表 newlist
就好像它是函数 newlist(k,k['label'])
一样。 newlist
只是一个变量,您将结果列表分配给它。
关于python - 使用生成器或理解从字典中创建一个二元组列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45615728/