[英]How can I replace all the values of a Python dictionary with a range of values?
我有以下字典:
mydict = {('a', 'b'): 28.379,
('c', 'd'): 32.292,
('e', 'f'): 61.295,
('g', 'h'): 112.593,
('i', 'j'): 117.975}
我想用 1 到 5 的范围替换所有值,但保持键的顺序。 结果,我会得到这个:
mydict = {('a', 'b'): 1,
('c', 'd'): 2,
('e', 'f'): 3,
('g', 'h'): 4,
('i', 'j'): 5}
字典的长度实际上是 22000,所以我需要一个从 1 到 22000 的范围。我该怎么做呢?
提前致谢。
使用enumerate
对键进行迭代,您可以执行以下操作:
mydict = {('a', 'b'): 28.379,
('c', 'd'): 32.292,
('e', 'f'): 61.295,
('g', 'h'): 112.593,
('i', 'j'): 117.975}
for i, key in enumerate(mydict): # iterates on the keys
mydict[key] = i
print(mydict)
# {('a', 'b'): 0, ('c', 'd'): 1, ('e', 'f'): 2, ('g', 'h'): 3, ('i', 'j'): 4}
重要提示:dicts 仅在 Python 3.7 之后才正式订购(并且在 3.6 之后的 CPython 实现中),所以这对于旧版本的 Python 没有多大意义。
回答您的评论: enumerate采用可选的第二个参数start
(默认为 0)
因此,如果您想从 1 开始,只需执行以下操作:
for i, key in enumerate(mydict, start=1): # iterates on the keys
mydict[key] = i
最简单的方法是从前一个字典的键创建另一个字典。
mydict2=dict()
for i,key in enumerate(mydict):
mydict2[key]=i+1
您可以使用更紧凑的单线来做到这一点:
mydict = {('a', 'b'): 28.379,
('c', 'd'): 32.292,
('e', 'f'): 61.295,
('g', 'h'): 112.593,
('i', 'j'): 117.975}
{k: i for i, (k, v) in enumerate(mydict.items())}
对此的熊猫解决方案:
import pandas as pd
a = pd.DataFrame(mydict, index=[0]).T
a[0] = list(range(0,len(a)))
a.to_dict()[0]
# {('a', 'b'): 0, ('c', 'd'): 1, ('e', 'f'): 2, ('g', 'h'): 3, ('i', 'j'): 4}
这可以通过dict.update
和itertools.count
优雅地完成,并且可以避免显式循环:
>>> mydict = {('a', 'b'): 28.379,
... ('c', 'd'): 32.292,
... ('e', 'f'): 61.295,
... ('g', 'h'): 112.593,
... ('i', 'j'): 117.975}
>>> from itertools import count
>>> mydict.update(zip(mydict, count(1)))
>>> mydict
{('a', 'b'): 1, ('c', 'd'): 2, ('e', 'f'): 3, ('g', 'h'): 4, ('i', 'j'): 5}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.