python添加到无序排序的列表中



我有一个类似的列表

entries = [{'First Name': 'Sher', 'Last Name': 'Hello', 'Age': '22', 'Telephone': '2989484'}, 
{'First Name': 'Ali', 'Last Name': 'Khan', 'Age': '22', 'Telephone': '398439'}, 
{'First Name': 'Talha', 'Last Name': 'Khan', 'Age': '22', 'Telephone': '3343434'}]

我想在这个列表中添加另一个列表元素,但在按"0"排序的位置;姓氏";

您可以在Last Name的基础上将新的dictionary附加到list,将sort添加到list。以下是您的操作方法:

entries = [{'First Name': 'Sher', 'Last Name': 'Hello', 'Age': '22', 'Telephone': '2989484'}, {'First Name': 'Ali', 'Last Name': 'Khan', 'Age': '22', 'Telephone': '398439'}, {'First Name': 'Talha', 'Last Name': 'Khan', 'Age': '22', 'Telephone': '3343434'}]
new = {'First Name': 'Dean', 'Last Name': 'Jones', 'Age': '22', 'Telephone': '2989484'}
entries.append(new)
entries = sorted(entries, key = lambda i: i['Last Name'])
print(entries)

输出:

[{'First Name': 'Sher', 'Last Name': 'Hello', 'Age': '22', 'Telephone': '2989484'}, {'First Name': 'Dean', 'Last Name': 'Jones', 'Age': '22', 'Telephone': '2989484'}, {'First Name': 'Ali', 'Last Name': 'Khan', 'Age': '22', 'Telephone': '398439'}, {'First Name': 'Talha', 'Last Name': 'Khan', 'Age': '22', 'Telephone': '3343434'}]

但正如@Serial Lazer在评论中正确指出的那样,这可能很耗时。更好的解决方案是:

entries = [{'First Name': 'Sher', 'Last Name': 'Hello', 'Age': '22', 'Telephone': '2989484'}, {'First Name': 'Ali', 'Last Name': 'Khan', 'Age': '22', 'Telephone': '398439'}, {'First Name': 'Talha', 'Last Name': 'Khan', 'Age': '22', 'Telephone': '3343434'}]
new = {'First Name': 'Dean', 'Last Name': 'Jones', 'Age': '22', 'Telephone': '2989484'}
for index,dictt in enumerate(entries):
if dictt['Last Name'] > new['Last Name']:
entries.insert(index,new)
break
print(entries)

输出:

[{'First Name': 'Sher', 'Last Name': 'Hello', 'Age': '22', 'Telephone': '2989484'}, {'First Name': 'Dean', 'Last Name': 'Jones', 'Age': '22', 'Telephone': '2989484'}, {'First Name': 'Ali', 'Last Name': 'Khan', 'Age': '22', 'Telephone': '398439'}, {'First Name': 'Talha', 'Last Name': 'Khan', 'Age': '22', 'Telephone': '3343434'}]

如果要在entries中插入dictionarieslist,则不建议使用上述解决方案,因为它们速度较慢。最有效的方法是使用bisect模块,如下所示:

import bisect
entries = [{'First Name': 'Sher', 'Last Name': 'Hello', 'Age': '22', 'Telephone': '2989484'}, {'First Name': 'Ali', 'Last Name': 'Khan', 'Age': '22', 'Telephone': '398439'}, {'First Name': 'Talha', 'Last Name': 'Khan', 'Age': '22', 'Telephone': '3343434'}]
new = [{'First Name': 'Dean', 'Last Name': 'Jones', 'Age': '22', 'Telephone': '2989484'}]
for dictt in new:
index = bisect.bisect([dict_['Last Name'] for dict_ in entries], dictt['Last Name'])
entries.insert(index,dictt)
print(entries)

输出:

[{'First Name': 'Sher', 'Last Name': 'Hello', 'Age': '22', 'Telephone': '2989484'}, {'First Name': 'Dean', 'Last Name': 'Jones', 'Age': '22', 'Telephone': '2989484'}, {'First Name': 'Ali', 'Last Name': 'Khan', 'Age': '22', 'Telephone': '398439'}, {'First Name': 'Talha', 'Last Name': 'Khan', 'Age': '22', 'Telephone': '3343434'}]

如果您想在每次添加信息时进行排序

您也可以将其修改为采用非int值,但它们看起来很实用

entries = [{'First Name': 'Sher', 'Last Name': 'Hello', 'Age': '22', 'Telephone': '2989484'}, {'First Name': 'Ali', 'Last Name': 'Khan', 'Age': '22', 'Telephone': '398439'}, {'First Name': 'Talha', 'Last Name': 'Khan', 'Age': '22', 'Telephone': '3343434'}]
def addData(first, last, age: int, phone: int):
entries.append({'First Name': first, 'Last Name': last, 'Age': age, 'Telephone': phone})
entries.sort(key = lambda x: x['Last Name'])
addData("iron", "key", 18, 1231231234)
print(entries)
[{'First Name': 'Sher', 'Last Name': 'Hello', 'Age': '22', 'Telephone': '2989484'}, {'First Name': 'Ali', 'Last Name': 'Khan', 'Age': '22', 'Telephone': '398439'}, {'First Name': 'Talha', 'Last Name': 'Khan', 'Age': '22', 'Telephone': '3343434'}, {'First Name': 'iron', 'Last Name': 'key', 'Age': 18, 'Telephone': 1231231234}]
def myFunc(e):
return e['Last Name']
entries = [{'First Name': 'Sher', 'Last Name': 'Sello', 'Age': '22', 'Telephone': '2989484'},
{'First Name': 'Ali', 'Last Name': 'Khan', 'Age': '22', 'Telephone': '398439'},
{'First Name': 'Talha', 'Last Name': 'Khan', 'Age': '22', 'Telephone': '3343434'}]
entries.append({'First Name': 'Sam', 'Last Name': 'Singh', 'Age': '22', 'Telephone': '3343434'})
entries.sort(key=myFunc)
print(entries)

最新更新