在不使用键名称的情况下更改字典中的多个值

时间:2016-06-04 05:08:58

标签: python list dictionary

我想将字典中的所有值更改为不同的值。 例如,在字典中

dic = {'a': 1, 'b':2, 'c':3, 'd':4, 'e': 5, 'f':6}
lst = [100, 200, 300, 400, 500, 600]

我想将dic的值更改为lst中的数字 dic = {'a': 100 ,'b': 200 ... }

有没有办法在不使用键名的情况下更改所有值?我实际字典的长度大约是100。

2 个答案:

答案 0 :(得分:4)

如果您需要将dict中的每个数字乘以100,则可以使用dict comprehension一次迭代所有值。

dic = {'a': 1, 'b':2, 'c':3, 'd':4, 'e': 5, 'f':6}
dic = {k: v*100 for k, v in dic.items()}

如果您希望将列表中的数字专门分配给字母表中的字母(按相同顺序)you can zip your list with small caps letters,并使用此list来构建您的dict

from string import ascii_lowercase

# you can do this with a dict comprehension
dic = {k: v for (k, v) in zip(ascii_lowercase, lst)}

# or equivalently, call the dict() built-in function
dic = dict(zip(ascii_lowercase, lst))

在最后一个示例中,列表的顺序将反映在字母表的字母顺序中。因此a将为100b将为200等。

但是你不能让dict记住它"命令"。在dict中没有订单,您可以选择值并单独设置它们,而不是通过保证订单迭代它们(如另一个答案中所述,您需要OrderedDict为此)。

答案 1 :(得分:0)

简短的回答:不,字典不是在python中排序的,所以没有简单的方法来匹配值。

更长的答案:排序,你可以使用Ordered Dictionaries。

dic={'a': 1, 'b':2, 'c':3, 'd':4, 'e': 5, 'f':6}
o_dic = OrderedDict(sorted(dic.items(), key=lambda t: t[0]))
lst=[100,200,300,400,500,600]

for index, key in enumerate(o_dic.keys()):
    o_dic[key] = lst[index]