枚举字典迭代键和值[重复]

Posted

技术标签:

【中文标题】枚举字典迭代键和值[重复]【英文标题】:Enumerate Dictionary Iterating Key and Value [duplicate] 【发布时间】:2018-03-21 04:56:58 【问题描述】:

我有一个名为 regionspointcount 的字典,其中包含区域名称 (str) 作为键和该区域内的一种特征类型的计数 (int) 作为值,例如'Highland':21.

我想在枚举时迭代字典的键和值。有没有办法做类似的事情:

for i, k, v in enumerate(regionspointcount.items()):

还是我必须求助于使用计数变量?

【问题讨论】:

用元组解包 -> for i, (k, v) in enumerate(regionspointcount.items()): @cᴏʟᴅsᴘᴇᴇᴅ 虽然这条评论很简单,但它应该是一个答案(而不是评论)。 字典键的“索引”没有任何意义,因为它们没有排序。你真正想要解决的问题是什么?另见***.com/questions/42193712/… 蠕虫,如果你想保持计数,你应该看看我最喜欢的数据结构:collections.Counter @Worm 提出重复的问题不是犯罪。复制品作为原件的路标。在某些情况下,副本得到的答案甚至比原来的还要好,这对每个人来说都是一种胜利。 【参考方案1】:

给定字典d

d
# 'A': 1, 'B': 2, 'C': 3, 'D': 4

您可以使用元组来解压for 循环头中的键值对。

for i, (k, v) in enumerate(d.items()):
     print(i, k, v)

# 0 A 1
# 1 B 2
# 2 C 3
# 3 D 4

要了解为什么需要额外的括号,请查看enumerate 的原始输出:

list(enumerate(d.items()))
# [(0, ('A', 1)), (1, ('B', 2)), (2, ('C', 3)), (3, ('D', 4))]

键值对封装在元组中,因此必须以相同的方式解包。

【讨论】:

谢谢,我还没有找到在线执行此操作的方法。我会接受,然后在 2 小时内获得新选票时 +1 :) 知道list(enumerate(d.items())) 将被解包为[(0, ('A', 1)), (1, ('C', 3)), (2, ('B', 2)), (3, ('D', 4))] 也很有用。这就是将它们解包为单独元组的原因。 @Unni,谢谢。已添加。 这都在***.com/questions/42193712/… @jonrsharpe 谢谢。既然我已经回答了,我认为我不应该关闭它。你会标记它吗?另外,我认为作为一个合适的受骗者离开很好,措辞不同,不需要被否决。【参考方案2】:

假设您只想枚举键/值对(并且不需要索引i),您可以直接迭代d.items()

d = 'A': 1, 'B': 2, 'C': 3, 'D': 4
for k, v in d.items():
    print(k, v)

这会打印出类似的东西

A 1
C 3
B 2
D 4

请注意,条目不一定是有序的。

【讨论】:

OP 明确表示他想在迭代键值对时枚举(即有一个可供他使用的索引号)。因此,可悲的是,您不需要索引 i 的假设是不正确的。 @MA53QXR 只需阅读标题:迭代键和值。它确实说迭代键、索引和值。

以上是关于枚举字典迭代键和值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用 min 从字典中获取最低键和值 [重复]

如何从一系列字典中创建键和值的数据框[重复]

如何在 AngularJS 中使用 ng-repeat 迭代键和值?

Map里面的键和值可以为空吗

字典键和值以分隔 numpy 数组

使用键和值约束扩展字典