python - Python 字典列表 - 在列表中找到最接近新条目的 4 个条目
问题描述
我有一个字典列表:
members = [
{'name': 'Fred', 'age': 22},
{'name': 'John', 'age': 25},
{'name': 'Adamn', 'age': 33},
{'name': 'Lily', 'age': 17},
{'name': 'Susy', 'age': 19},
{'name': 'Frank', 'age': 42},
{'name': 'Adam', 'age': 38},
{'name': 'Jose', 'age': 18},
{'name': 'Mikey', 'age': 14},
{'name': 'Shelby', 'age': 27}
]
然后我有一个新成员加入,我想将他们与年龄最接近的 4 人配对。
new_member = {'name': 'Rob', 'age': 23}
这将选出 Fred (22)、John (25)、Susy (19)、Shelby (27),因为他们的年龄与 Rob 最接近。我的方法似乎是返回一个无限循环而不是正确的结果。我也有一种感觉,有一种更优雅的方式来解决这个问题,我希望能够理解/学习。但这就是我到目前为止所拥有的:
new_list = sorted(members, key=lambda k: k['age'])
for row in newlist:
diff = row['age'] - new_member['age']
row.update({'diff':diff})
closest = []
for i, mem in enumerate(newlist):
if i == 0:
closest.insert(0, mem)
elif i > 0:
for row in closest:
if row['diff'] < mem['diff']:
closest.insert(0, mem)
解决方案
为什么不按年龄差异排序呢?
closest = sorted(
members, key=lambda x: abs(x['age'] - new_member['age'])
)[:4]
差异越小=>他们的年龄越接近。
print(closest)
[{'age': 22, 'name': 'Fred'},
{'age': 25, 'name': 'John'},
{'age': 19, 'name': 'Susy'},
{'age': 27, 'name': 'Shelby'}
]
请记住,您会将原始记录对象分配给closest
,因此如果您最终修改这些对象,members
也会反映这些更改。您可以copy
为这种情况预先添加呼叫:from copy import deepcopy; closest = deepcopy(....)
推荐阅读
- java - 如何从 GET 查询参数中自动解码 Dto
- python - 有没有办法在 Pygame 中使用类来组合这两种类型的代码?
- c# - 如何仅为一个单元格设置货币格式
- python - 如何解析一个
目的? - python - 无法在 Ubuntu 22.04 EC2 实例上调用 pickle 加载功能
- python - 真正的 JSON 嵌套字典 使用 Python / pandas 获取字典
- data-analysis - SPSS改变计数总数
- python - 循环问题?
- python-3.x - Python 打包和 CircleCI:解析要求失败
- javascript - 如何使用 useEffect 和 useState 修复此最大深度超出错误?