我有一个类似的列表
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
中插入dictionaries
的list
,则不建议使用上述解决方案,因为它们速度较慢。最有效的方法是使用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)