为什么我使用 for 循环从另一个字典创建的字典更小?

bus_stops = jsoncalls.get_bus_stop()

print(len(bus_stops))

stop_map = {stop['Description']: stop for stop in bus_stops}

print('extracted dic: '+str(len(stop_map)))

这是我的代码的样子。基本上,我使用从 api 调用获得的另一种方法创建字典。然后我做了我认为是创建另一个字典,其中只填充了该字典中的值“描述”。


第一个打印是第一个字典的长度。第二个打印是第二个的长度。


5024

extracted dic: 4457

第二本词典短 600 条!我对可能导致这种情况的原因感到困惑。谁能给我建议?


慕侠2389804
浏览 81回答 2
2回答

ibeautiful

您通过将其用作键来按描述对项目进行分组。一个键只能存在一次。如果两个项目具有相同的描述,它们将占用相同的键,其中只有最后一个会存在。

米琪卡哇伊

由于 dict 键是唯一的,我敢打赌您在源 dict 中有重复的描述。例如,假设您有以下数据集:bus_stops = [  {"Id": 1, "Description": "spam"},  {"Id": 2, "Description": "cheese"},  {"Id": 3, "Description": "spam"},]注意结果中只有最后一个“垃圾邮件”:>>> stop_map = {stop['Description']: stop for stop in bus_stops}{   'cheese': {'Description': 'cheese', 'Id': 2},   'spam': {'Description': 'spam', 'Id': 3}},}如果是这种情况,并且您想按描述对停靠点进行分组,则可以使用带有描述作为键和停靠点列表作为值的 dict - 该setdefault方法对于这种数据转换很方便:stop_map = {}for stop in bus_stops:    stop_map.setdefault(stop["Description"], []).append(stop)结果:{    "cheese": [        {            "Id": 2,             "Description": "cheese"        },    ],     "spam": [        {            "Id": 1,             "Description": "spam"        },         {            "Id": 3,             "Description": "spam"        },    ],}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python