Printing different keys that have same value in one row from a dictionary
这是一本示例字典。
1
| example = {'a': 10, 'b': 12, 'c': 10, 'd': 12} |
我想打印如下。
- python反转/反转映射
- 您的字典语法错误:它应该是example='a':10,'b':12,'c':10,'d':12
- 欢迎使用堆栈溢出。请阅读如何提问
- @阿兰费,谢谢你的欺骗目标。我要用这个结束它。
- 它永远不会结束。这不是副本。操作员可能希望以这种格式打印数据,而不是简单地执行将导致该格式的操作。像这样的"复制品"每天有一百万个。这很荒谬,需要停止。就像你们都在寻找一个问题被认为是重复的方法:"这个问题需要递归吗?复制品!"不要介意"复制"的目标和原始的处理完全不同的问题,并寻求完全不同的结果。为了所有神圣的人的爱,让他们休息一下,
- @Aaronbrandhagen我知道你来自哪里(这就是为什么我没有以dupe结束这个问题),但你必须承认这只是两个问题的一个简单组合,"我如何颠倒一个听写?"以及"如何打印以逗号分隔的值列表?".我添加了一个相关的副本。
- Aran。我真的很感激你的反应。编程中的学习曲线是无与伦比的。没有比得上的了。模式不存在。这就是它所说的:代码。熟练的编码员和初学者(尤其是自学的)之间的知识鸿沟是难以理解的。对您来说,最简单、最基本的代码是从初学者身上删除数百/数千小时的工作,甚至对它有一个相当好的理解。编程是一个相互关联的抽象的银河网。随着添加更多层,难度呈指数级增长。…
- 所以,对于初学者来说,一些琐碎的问题是另一个拼图——将另一个无模式的概念/范式塞进记忆中,并将它们与所学的其他材料联系起来,同时不断地陷入无意识、令人恼火的矛盾中,这些矛盾也需要保持记忆。如果我有任何意义,请告诉我。我讨厌通过文本进行这样的对话,所以很多东西可能会丢失,被误解。
- 要点(抱歉,我对这个主题很感兴趣):代码中最小的差异是大多数情况下数百个条件/规则彼此移除的时间。而且,这些条件和规则对现有问题的影响远远不止一个。模式最终会被学习,但只有在曲线被超越之后。那个灵魂破碎的怪兽。到此为止?你知道你所知道的,用任何类型的地图或模式来构建你所知道的。所以,一旦基础知识对你来说变得基本,就不可能知道初学者是如何处理自己的学习网络的。
有两种方法可以解决这个问题。
高效:collections.defaultdict(list)
构造一个键和值颠倒的新字典。重要的是,您可以有重复的值,所以我们使用一个列表来保存这些值。肾盂入路采用collections.defaultdict。
对于非常大的字典,这可能有很大的内存开销。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| 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 |
手册:列表理解循环
这种方法计算效率很低,但需要较少的内存开销:
1 2 3 4 5
| 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)
这能实现你想要的吗?
1 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]) |