所以這是我迄今爲止的嘗試;我用一個有問題的lambda以前的答案,然後嘗試了別的東西。我的第二種方法可行,但我想知道(如果和)爲什麼效率低下。另外一個修復會很好。通過詞典列表高效排序?
people = [
{'name': "Tom", 'age': 10},
{'name': "Mark", 'age': 5},
{'name': "Pam", 'age': 7}
]
# This did not work; I got '<filter object at 0x1020b7f28>' back, which I believe is the memory location itself.
result = filter(lambda person: person['name'] == 'Pam', people)
print(result)
# This is the attempt that works but looks very ugly.
def search(name):
counter = 0
for student in people:
if student['name'] == name:
print("{0} is {1} years old.".format(student['name'], student['age']))
break
else:
counter += 1
if counter == len(people):
print("There are no students with that name.")
'filter'是懶惰的,調用'tuple(...)'就可以實現它的結果。 –
你的意思是「排序」或「搜索」? – Anthon
你不需要保留一個人數的計數器。如果您已遍歷列表中的所有元素並未找到該名稱,則可以假定該名稱不在列表中。因此,保留一個計數器並檢查它是否等於人的長度是多餘的,有幾種不同的方法可以解決這個問題,但不是使用「break」,而是從if語句中返回,並將打印語句保留在for循環原始。 – Erich