遍历字典

时间:2019-03-09 01:02:49

标签: python dictionary

我有一个包含3个列表的字典,每个字典包含3个元素,并且想要分别更改每个列表中的每个元素,从而生成9个新字典,如下所示:

d = {1:[a,b,c], 2:[e,f,g], 3:[h,i,j]}
d1 = {1:[a+k,b,c], 2:[e,f,g], 3:[h,i,j]}
d2 = {1:[a, b+k, c], 2:[e,f,g], 3:[h,i,j]}
...
d9 = {{1:[a,b,c], 2:[e,f,g], 3:[h,i,j+k]}

有没有一种方法可以不必单独对每个字典进行硬编码?接下来的代码中,我将需要分别引用列表集(即,我将[a,b,c + k],[d,e,f],[g,h,i]输入到某些函数中)以获得解决方案),但我很高兴这些数据不采用字典形式,只要以后我仍然可以引用它们的集合!

1 个答案:

答案 0 :(得分:2)

您可以使用列表推导迭代从0到8的数字,并使用dict推导生成列表的dict,该dict推导输出基于数字的商和3的余数,可能添加了k的列表项:

[{k: [a + ('k' if n // 3 + 1 == k and n % 3 == i else '') for i, a in enumerate(l)] for k, l in d.items()} for n in range(9)]

所以给定:

d = {1:['a','b','c'], 2:['e','f','g'], 3:['h','i','j']}

这将返回:

[{1: ['ak', 'b', 'c'], 2: ['e', 'f', 'g'], 3: ['h', 'i', 'j']},
 {1: ['a', 'bk', 'c'], 2: ['e', 'f', 'g'], 3: ['h', 'i', 'j']},
 {1: ['a', 'b', 'ck'], 2: ['e', 'f', 'g'], 3: ['h', 'i', 'j']},
 {1: ['a', 'b', 'c'], 2: ['ek', 'f', 'g'], 3: ['h', 'i', 'j']},
 {1: ['a', 'b', 'c'], 2: ['e', 'fk', 'g'], 3: ['h', 'i', 'j']},
 {1: ['a', 'b', 'c'], 2: ['e', 'f', 'gk'], 3: ['h', 'i', 'j']},
 {1: ['a', 'b', 'c'], 2: ['e', 'f', 'g'], 3: ['hk', 'i', 'j']},
 {1: ['a', 'b', 'c'], 2: ['e', 'f', 'g'], 3: ['h', 'ik', 'j']},
 {1: ['a', 'b', 'c'], 2: ['e', 'f', 'g'], 3: ['h', 'i', 'jk']}]