我的列表和我的字典一起被删除了



我写了下面的代码,我不明白为什么我的字典和列表一起被删除了。真的希望你能帮我。我被困在这里了。

这是我的代码:

course_dict = {'I': 3, 'love': 3, 'self.py!': 2}
save_dict = {}
def inverse_dict(Recived_dict):
global save_dict
list_counter = 0
new_dict = {}
my_list = []
current_value = list(Recived_dict.values())[0]
for key, value in Recived_dict.items():
if value == current_value:
my_list.append(key)
new_dict[value] = my_list
save_dict = new_dict
else:
if list_counter == 0:
del my_list[0:]
list_counter =1
my_list.append(key)
new_dict[value] = my_list
print(new_dict)
inverse_dict(course_dict)

由于您的值不是唯一的,因此您需要一种方法来聚合与原始值对应的原始键。您可以从包含新键和值的空白列表的字典开始,然后append新值:

course_dict = {'I': 3, 'love': 3, 'self.py!': 2}

def inverse_dict(Recived_dict):
new_dict = {v: [] for v in Recived_dict.values()}
for k, v in Recived_dict.items():
new_dict[v].append(k)
print(new_dict)

inverse_dict(course_dict)
{3: ['I', 'love'], 2: ['self.py!']}

假设您希望能够使用这个新字典,您的函数可能应该return反转字典:

def inverse_dict(Recived_dict):
new_dict = {v: [] for v in Recived_dict.values()}
for k, v in Recived_dict.items():
new_dict[v].append(k)
return new_dict

course_dict = {'I': 3, 'love': 3, 'self.py!': 2}
save_dict = inverse_dict(course_dict)
print(save_dict)
{3: ['I', 'love'], 2: ['self.py!']}

defaultdict将使这更容易。

from collections import defaultdict
a = {3: 'foo', 5: 'foo', 4: 'bar'}
d = defaultdict(list)
for k, v in a.items():
d[v].append(k)

结果:

defaultdict(<class 'list'>, {'foo': [3, 5], 'bar': [4]})

您也可以使用itertools.groupby

>>> from itertools import groupby
>>> from operator import itemgetter
>>> a = {3: 'foo', 5: 'foo', 4: 'bar'}
>>> {k: [b for b, _ in v]
...  for k, v in groupby(
...    sorted(
...      a.items(),
...      key=itemgetter(1)
...    ),
...    key=itemgetter(1)
...  )}
{'bar': [4], 'foo': [3, 5]}

最新更新