Как распаковать несколько одинаковых кортежей - PullRequest
0 голосов
/ 07 октября 2018
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 голосов
/ 09 октября 2018

Такой словарь не может существовать, так как keys являются уникальными, но это было бы возможно, если бы это был список кортежей, например lst = [('0',[0,0]), ('1',[2,1]), ('0',[5,1]), ('1',[20,1])] или такой же для списка списков.Мы можем использовать sort, groupby и конструктор словаря

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]}
0 голосов
/ 07 октября 2018

Словарь использует серию уникальных keys для идентификации одного или набора values.То, как ваш словарь определен выше, будет возвращать только второй экземпляр 0 и 1 keys.Ваш value может иметь повторяющиеся данные, но не ваши key.

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

Кроме того, ваш словарь values - это списки, а не кортежи.Важно знать разницу, поскольку кортежи являются неизменяемыми объектами, а списки являются изменяемыми объектами.

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

Если вы хотите создать новый словарь с использованием key и value:

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 является словарем.

...