在字典内的列表内以某种方式复制值

时间:2013-12-03 15:32:13

标签: python list dictionary duplicates

我是编程以及python的新手,我有一个问题,我没有在互联网上找到答案。我想知道你们中的任何一位天才是否能够帮助我。

我有一本字典,在字典中,键是字符串,值是列表。我想知道是否可以翻译这本词典:

dict1 = {'a':(1, 4, 7), 'b':(2, 5, 8), 'c':(3, 6, 9)}

将每个值重复一次为此格式,以便副本位于原件旁边:

dict1 = {'a':(1, 1, 4, 4, 7, 7), 'b':(2, 2, 5, 5, 8, 8), 'c':(3, 3, 6, 6, 9, 9)}

2 个答案:

答案 0 :(得分:5)

您可以使用dictionary comprehension

>>> dict1 = {'a':(1, 4, 7), 'b':(2, 5, 8), 'c':(3, 6, 9)}
>>> {x:tuple(z for z in y for _ in xrange(2)) for x,y in dict1.iteritems()}
{'a': (1, 1, 4, 4, 7, 7), 'c': (3, 3, 6, 6, 9, 9), 'b': (2, 2, 5, 5, 8, 8)}
>>>

但请注意,上面的代码是在Python 2.7中构建的。如果你使用的是Python 3.x,你会想要这个:

>>> dict1 = {'a':(1, 4, 7), 'b':(2, 5, 8), 'c':(3, 6, 9)}
>>> {x:tuple(z for z in y for _ in range(2)) for x,y in dict1.items()}
{'a': (1, 1, 4, 4, 7, 7), 'c': (3, 3, 6, 6, 9, 9), 'b': (2, 2, 5, 5, 8, 8)}
>>>

此外,在两种解决方案中,都无法保证密钥的顺序。这只是字典在Python中实现的结果。

答案 1 :(得分:1)

首先,您的值是元组,而不是列表。差异很微妙,但相关部分是元组不可变

因此,让我们首先将您拥有的内容转换为列表值字典,然后解决您的问题

>>> dict1 = {'a':(1, 4, 7), 'b':(2, 5, 8), 'c':(3, 6, 9)}
>>> dict1 = {k:list(v) for k,v in dict1.items()}
>>> dict1
{'b': [2, 5, 8], 'c': [3, 6, 9], 'a': [1, 4, 7]}
>>> answer = {k:list(itertools.chain.from_iterable(zip(v,v))) for k,v in dict1.items()}
>>> answer
{'b': [2, 2, 5, 5, 8, 8], 'c': [3, 3, 6, 6, 9, 9], 'a': [1, 1, 4, 4, 7, 7]}