使用生成器或理解从字典中创建一个2元组列表?

omr*_*hur 2 python dictionary tuples list-comprehension list

从字典看起来像:

newdict = {'1':{'label':'10232'},'2':{'label':'2420'},'3':{'label':'3530'},...}
Run Code Online (Sandbox Code Playgroud)

如何创建以下元组列表?

newlist = [(1,10232),(2,2420),(3,3530)]
Run Code Online (Sandbox Code Playgroud)

我认为我的列表理解不正确:

[newlist(k,k['label']) for (k,v) in newdict.items()]
Run Code Online (Sandbox Code Playgroud)

Moh*_*OUI 5

这有效:

newlist = [(k,v['label']) for (k,v) in newdict.items()]
Run Code Online (Sandbox Code Playgroud)

这是一个完全可重现的例子:

>>> 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')]
>>> 
Run Code Online (Sandbox Code Playgroud)

如果您希望元组为int,则只需将值转换为int,如下所示:

>>> newlist = [(int(k),int(v['label'])) for (k,v) in newdict.items()] 
>>> newlist
[(1, 10232), (3, 3530), (2, 2420)]
>>> 
Run Code Online (Sandbox Code Playgroud)

说明

newdict.items()虽然是字典的(键,值)对的列表,但它是一个迭代器.因此,您的第一个错误是尝试访问label密钥k['label']而不是在值中访问密钥v['label'].

第二个问题是你试图将列表newlist称为函数newlist(k,k['label']).newlist只是一个变量,您将结果列表分配给它.