преобразование словаря, содержащего кортеж, в словарь - PullRequest
0 голосов
/ 27 марта 2020

Я сделал словарь из текстового файла:

{('Aaronsburg', 'PA'): ('40.9184', '-77.3786'), ('Abbeville', 'AL'): 
 ('31.5951', '-85.2108'), ('Abbeville', 'GA'): ('31.9890', '-83.3217'),
 ('Abbeville', 'LA'): ('29.9124', '-92.2110'), ('Abbeville', 'MS'): 
 ('34.4771', '-89.4450'), ('Abbeville', 'SC'): ('34.1621', '-82.4333')}

Это пример из исходного текстового файла:

  Aaronsburg,PA,40.9184,-77.3786
  Abbeville,AL,31.5951,-85.2108

и хочу изменить весь кортеж внутри словаря на словарь следующим образом:

{{'Aaronsburg', 'PA'}: {'40.9184', '-77.3786'}, {'Abbeville', 'AL'}: 
 {'31.5951', '-85.2108'}, {'Abbeville', 'GA'}: {'31.9890', '-83.3217'}, 
 {'Abbeville', 'LA'}: {'29.9124', '-92.2110'}, {'Abbeville', 'MS'}: 
 {'34.4771', '-89.4450'}, {'Abbeville', 'SC'}: {'34.1621', '-82.4333'}}

но застрял при этом ....

Это оригинальный код до получения словаря

def coordinates(txt):
  d = []
  with open(txt) as f:
       for line in f:
           d.append(line.rstrip().split(','))
  new_dict = {}
  for sublist in d:
      new_dict[tuple(sublist[:2])] = tuple(sublist[2:])
  return((new_dict))

Ответы [ 2 ]

2 голосов
/ 27 марта 2020

Ключи словаря должны быть неизменными . Таким образом, вы можете использовать frozenset вместо set для ключей и set для значений.

{frozenset(k):set(v) for k,v  in my_dict.items()}

Вывод:

{frozenset({'Aaronsburg', 'PA'}): {'-77.3786', '40.9184'},
 frozenset({'AL', 'Abbeville'}): {'-85.2108', '31.5951'},
 frozenset({'Abbeville', 'GA'}): {'-83.3217', '31.9890'},
 frozenset({'Abbeville', 'LA'}): {'-92.2110', '29.9124'},
 frozenset({'Abbeville', 'MS'}): {'-89.4450', '34.4771'},
 frozenset({'Abbeville', 'SC'}): {'-82.4333', '34.1621'}}
1 голос
/ 27 марта 2020

Я думаю, что то, что вы пытаетесь сделать, невозможно, так как ключ не может быть из изменяемого типа. Чтение python словарной документации словарной документации :

словари индексируются по ключам, которые могут быть любого неизменяемого типа ; строки и числа всегда могут быть ключами. Кортежи могут использоваться в качестве ключей, если они содержат только строки, числа или кортежи; если кортеж содержит какой-либо изменяемый объект прямо или косвенно, он не может использоваться в качестве ключа. Вы не можете использовать списки в качестве ключей, поскольку списки могут быть изменены на месте с использованием назначений индексов, назначений срезов или таких методов, как append () и extension ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...