【发布时间】:2023-01-22 21:33:56
【问题描述】:
我有听写清单,关键“城市”可能是重复的。我需要从最重复的城市到最少的城市对这个列表进行排序。
我的字典列表:
data = [
{'city': 'Zp', 'p': 8},
{'city': 'Kyiv', 'p': 2},
{'city': 'Lviv', 'p': 7},
{'city': 'Kyiv', 'p': 3},
{'city': 'Kyiv', 'p': 4},
{'city': 'Brd', 'p': 1},
{'city': 'Kyiv', 'p': 5},
{'city': 'Zp', 'p': 9},
{'city': 'Lviv', 'p': 6},
]
我试图按键值计数排序,但得到了相同的结果:
data = sorted(data, key=lambda x: data.count(x['city']))
# >> data
# [
# {'city': 'Zp', 'p': 8},
# {'city': 'Kyiv', 'p': 2},
# {'city': 'Lviv', 'p': 7},
# {'city': 'Kyiv', 'p': 3},
# {'city': 'Kyiv', 'p': 4},
# {'city': 'Brd', 'p': 1},
# {'city': 'Kyiv', 'p': 5},
# {'city': 'Zp', 'p': 9},
# {'city': 'Lviv', 'p': 6},
# ]
这会给我几乎需要的结果,但是有 2 个带有“Lviv”的对象和 2 个带有“Zp”的对象,并且它们在结果中混合在一起(而且我认为这种方法需要太多资源)
data = sorted(
data,
key=lambda x: len(
[i for i in data if i['city'] == x['city']]
),
reverse=True
)
# >> data
# [
# {'city': 'Kyiv', 'p': 2},
# {'city': 'Kyiv', 'p': 3},
# {'city': 'Kyiv', 'p': 4},
# {'city': 'Kyiv', 'p': 5},
# {'city': 'Zp', 'p': 8},
# {'city': 'Lviv', 'p': 7},
# {'city': 'Zp', 'p': 9},
# {'city': 'Lviv', 'p': 6},
# {'city': 'Brd', 'p': 1},
#]
我想得到什么:
# >> data
# [
# {'city': 'Kyiv', 'p': 2},
# {'city': 'Kyiv', 'p': 3},
# {'city': 'Kyiv', 'p': 4},
# {'city': 'Kyiv', 'p': 5},
# {'city': 'Lviv', 'p': 6},
# {'city': 'Lviv', 'p': 7},
# {'city': 'Zp', 'p': 8},
# {'city': 'Zp', 'p': 9},
# {'city': 'Brd', 'p': 1},
# ]
【问题讨论】:
-
很多基辅在那里 :-)