【问题标题】:Printing different keys that have same value in one row from a dictionary [duplicate]从字典中打印一行中具有相同值的不同键[重复]
【发布时间】:2018-05-21 08:36:44
【问题描述】:

这是一个示例字典。

example = {'a': 10, 'b': 12, 'c': 10, 'd': 12}

我想像下面这样打印它们。

12 b, d
10 a, c

【问题讨论】:

  • 您的字典语法错误:应该是 example = {'a' : 10, 'b' : 12, 'c' : 10, 'd' : 12}
  • 欢迎来到 Stack Overflow。请阅读How to ask a good question
  • @Aran-Fey 感谢欺骗目标。我正在关闭它。
  • 它永远不会结束。这不是重复的。 OP 可能希望以该格式打印数据,而不是能够简单地执行会导致它的操作。每天有一百万个这样的“重复”。这简直是​​荒谬的,它需要停止。就像你们都在寻找任何方法来将一个问题视为重复:“这个问题需要递归吗?重复!”不要介意“重复”的目标和原始处理完全不同的问题并寻求完全不同的结果。为了所有神圣的爱,让这些家伙休息一下,

标签: python dictionary


【解决方案1】:

有两种方法可以解决这个问题。

高效:collections.defaultdict(list)

构造一个键和值倒置的新字典。重要的是,您可以有重复的值,因此我们使用列表来保存这些值。 Pythonic 方法是使用collections.defaultdict

对于非常大的字典,这可能会产生很大的内存开销。

example = {'a': 10, 'b': 12, 'c': 10, 'd': 12}

from collections import defaultdict

d = defaultdict(list)

for k, v in example.items():
    d[v].append(k)

for k, v in d.items():
    print(k, ' '.join(v))

10 a c
12 b d

手册:列表推导循环

这种方式计算效率低,但需要较少的内存开销:

for value in set(example.values()):
    print(value, ' '.join([k for k, v in example.items() if v == value]))

10 a c
12 b d

【讨论】:

  • 至少有人使用' '.join([]) (listcomp in join)
【解决方案2】:

这是否实现了您的目标?

for i in set(example.values()):
    print (i, [list(example.keys())[j] for j in range(len(example)) if list(example.values())[j]==i])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-17
    • 1970-01-01
    • 2020-12-18
    • 1970-01-01
    • 1970-01-01
    • 2019-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多