作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这个数据集。我想更新 MySQL 表。我可以用当前的形式做到这一点,但我认为转换为字典会缩小要更新的列表。
我的数据集:
dataset = [('121', set(['NY'])), ('132', set(['CA', 'NY'])), ('198', set(['NY'])), ('676', set(['NY'])), ('89', set(['NY', 'CA']))]
期望的输出:
字典:
output = {'set(['NY'])':121,198,676, 'set(['CA', 'NY'])':132,89}
最佳答案
您必须为 key 使用卡住集。无法保证具有相同元素的集合将始终变成相同的 repr
或 tuple
,因为集合是无序的。当然,除非你首先对集合元素进行排序,但这看起来很浪费
from collections import defaultdict
dataset = [('121', set(['NY'])), ('132', set(['CA', 'NY'])), ('198', set(['NY'])), ('676', set(['NY'])), ('89', set(['NY', 'CA']))]
output = defaultdict(list)
for value, key in dataset:
output[frozenset(key)].append(value)
或使用排序的元组
from collections import defaultdict
dataset = [('121', set(['NY'])), ('132', set(['CA', 'NY'])), ('198', set(['NY'])), ('676', set(['NY'])), ('89', set(['NY', 'CA']))]
output = defaultdict(list)
for value, key in dataset:
output[tuple(sorted(key))].append(value)
随机示例来说明这一点
>>> s,t = set([736, 9753, 7126, 7907, 3350]), set([3350, 7907, 7126, 9753, 736])
>>> s == t
True
>>> tuple(s) == tuple(t)
False
>>> frozenset(s) == frozenset(t)
True
>>> hash(tuple(s)) == hash(tuple(t))
False
>>> hash(frozenset(s)) == hash(frozenset(t))
True
关于list - 如何将包含集合的元组列表转换为字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10905758/
我是一名优秀的程序员,十分优秀!