如何解开多个相同的元组

时间:2018-10-07 16:11:53

标签: python list tuples

dictionaryofinputs = {'0':[0,0],'1':[2,1],'0':[5,1],'1':[20,1]}

我如何用一个键将所有值组成一个新字典? 我尝试过这样的事情:

 for item in dictionaryofinputs.values():
      if key[0] == '1'
          locationcoor = locationcoor + key[1]

但是没有用

感谢您的帮助,我刚开始使用python

2 个答案:

答案 0 :(得分:1)

字典使用一系列唯一的keys来标识一个或一组values。上面定义字典的方式只会返回01 keys的第二个实例。您的value可以重复数据,但不能重复key

https://docs.python.org/3/tutorial/datastructures.html

此外,您的字典values是列表,而不是元组。了解差异非常重要,因为元组是不可变的对象,而列表是可变的对象。

my_tuple = ('value1', 'value2')
my_list = ['value1', 'value2']

如果您想使用keyvalue创建新字典:

my_old_dict = {
    '0':[0, 0],
    '1':[2, 1],
}

my_new_dict = {}

for key, value in my_old_dict.items():
    if key == '1':
        my_new_dict[key] = value

print(my_new_dict)  #<-- PRINTS {'1': [2, 1]}
  

其他信息:

您在上面进行编码:

for item in dictionaryofinputs.values():
    if key[0] == '1'  #<-- THERE IS NO KEY, YOU DID NOT UNPACK ONE.
        locationcoor = locationcoor + key[1]

尚未完成,它无法正常工作的最大原因之一是因为您没有将键与值分开。应该是

for item, value in dictionaryofinputs.items():
    if item == '1':
        locationcoor[item] = value

假设locationcoor是字典。

答案 1 :(得分:1)

这样的字典不存在,因为keys是唯一的,但是如果这是一个像lst = [('0',[0,0]), ('1',[2,1]), ('0',[5,1]), ('1',[20,1])]这样的元组列表,或者对于列表列表是相同的,则这是可能的。我们可以使用sortgroupby和字典构造函数

from itertools import groupby
from operator import itemgetter

lst = [('0',[0,0]), ('1',[2,1]), ('0',[5,1]), ('1',[20,1])]
lst = sorted(lst, key=itemgetter(0))
lsta = []
for k, g in groupby(lst, key=itemgetter(0)):
    x = list(g)
    lsta.append((k, x[0][1] + x[1][1]))
d = dict(lsta)
# {'0': [0, 0, 5, 1], '1': [2, 1, 20, 1]}