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

标签 python list dictionary tuples list-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() 是一个遍历字典(键,值)对列表的迭代器。因此,您的第一个错误是尝试访问键 k['label'] 中的 label 而不是在值 v['label']< 中访问它

第二个问题是您试图调用列表 newlist 就好像它是函数 newlist(k,k['label']) 一样。 newlist 只是一个变量,您将结果列表分配给它。

关于python - 使用生成器或理解从字典中创建一个二元组列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45615728/

相关文章:

Python Pdb 给我一个回溯并且无法运行

python - '运行时错误 : maximum recursion depth exceeded in cmp' when working with lists

dictionary - 在位置缩放时将 SVG 元素保持为固定大小

c# - 字典方法 Remove 和 Clear (.NET Core) 在枚举期间修改集合。没有抛出异常

python - 使用psutil执行python脚本的pid

python - DOM 感知浏览器 Python GUI 小部件

python - 如何在 python-telegram-bot 包装器中使用 ForceReply

python - 如何在每次出现特定元素之间按字母顺序排列列表元素?

python - 哪个更快?检查某个东西是否在 Python 列表中? IE。成员(member)与非成员(member)

python - 需要有关 python 中排序功能的帮助