Почему некоторые из моих словарных ключей и значений исчезают? - PullRequest
0 голосов
/ 21 мая 2018

Это мой код:

listy = [[(100, 1), (90, 2), (90, 2), (80, 3), (70, 4)], [(100, 1), (90, 2), (90, 2), (80, 3), (80, 3)]]
track = [dict(x) for x in listy] 
print(track)

У меня есть вложенный список кортежей, и я превращаю их в словарь внутри списка, но проблема в том, что некоторые ключи и значения исчезают после измененияиз кортежей.Выходные данные выглядят так:

[{100: 1, 90: 2, 80: 3, 70: 4}, {100: 1, 90: 2, 80: 3}]

Вместо этого выходные данные должны были выглядеть следующим образом:

[{100:1, 90:2, 90:2, 80:3, 70:4},{100:1, 90:2, 90:2, 80:3, 80:3}]

Почему мой код выдает неправильный вывод, и что может бытьвозможное решение проблемы.Я использую Python 3.x

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

Python не допускает дублирования ключей в словарях.В чем-то похожем на ваш пример:

>>> d={100:1, 90:2, 90:3, 80:3, 70:4}
>>> d[90]
3

Если он допускает дублирование ключей, у него нет возможности узнать, вернуть ли 2 или 3 для 90.

Вы можете использовать collections.Counter, если хотите отслеживать количество кортежей:

from collections import Counter
listy = [[(100, 1), (90, 2), (90, 2), (80, 3), (70, 4)], [(100, 1), (90, 2), (90, 2), (80, 3), (80, 3)]]
count = [Counter(x) for x in listy]
print(count)

, что дает вывод:

[Counter({(90, 2): 2, (100, 1): 1, (80, 3): 1, (70, 4): 1}), Counter({(90, 2): 2, (80, 3): 2, (100, 1): 1})]

Или,если все, что вы хотите сделать, это связать ключи со значениями, вы можете использовать что-то вроде этого:

class update:
    def __init__(self):
        self.items = {}

    def add(self, number, value):
        if number in self.items: # if we've seen this key before
            self.items[number].append(value) # add it to the list
        else: # if we haven't, create a new list
            self.items[number] = [value]

    def __repr__(self):
        return str(self.items)


update_lists = []
for l in listy:
    u = update()
    for (k, v) in l:
        u.add(k, v)
    update_lists.append(u)

print(update_lists)

, который дает следующий вывод:

[{100: [1], 90: [2, 2], 80: [3], 70: [4]}, {100: [1], 90: [2, 2], 80: [3, 3]}]

0 голосов
/ 21 мая 2018

Значения исчезают, потому что вы пытаетесь создать dict с дублирующимися ключами:

data = [(1, 'one'), (1, 'two'), (2, 'three')]
dictionary = dict(data)

В результате:

{1: 'one', 2: 'three'}

Словари Python не поддерживают дубликаты ключей.

@ Махир Вы можете связать несколько значений с одним ключом в словаре, делая что-то вроде этого

multi_value_dict = {}
multi_value_dict.setdefault(key, []).append(value)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...