[英]Generate list of dictionaries without adjacent dictionary key/values equal
我有一個基於密鑰name
的值的排序列表,如下所示:
s = [{'name': 'Bart', 'age': 12}, {'name': 'Bart', 'age': 19}, {'name': 'Bart', 'age': 1},{'name': 'Homer', 'age': 30}, {'name': 'Homer', 'age': 12},{'name': 'Simpson', 'age': 19}]
我想安排列表中的元素,以使鍵name
相同的字典不會一個接一個出現。
要求的輸出:
[{'name': 'Bart', 'age': 12}, {'name': 'Homer', 'age': 30}, {'name': 'Simpson', 'age': 19}, {'name': 'Bart', 'age': 19}, {'name': 'Homer', 'age': 12}, {'name': 'Bart', 'age': 1}]
要么
[{'name': 'Bart', 'age': 12}, {'name': 'Homer', 'age': 30}, {'name': 'Bart', 'age': 19}, {'name': 'Homer', 'age': 12}, {'name': 'Bart', 'age': 1},{'name': 'Simpson', 'age': 19}]
為了獲得我嘗試使用map
和lambda
的任一必需輸出,其想法是將每個name
元素與下一個元素name
進行比較,如果它們不匹配,則交換值並返回結果列表。
下面是我正在嘗試的代碼:
map(lambda x: x if x['name']!=next(iter(x))['name'] else None, s)
next(iter(x)
一件事是next(iter(x)
沒有返回下一個元素),我也想知道為什么以及是否可以使用map
和lambda
實現解決方案?
我根據您的要求寫了這個,盡管它不那么簡潔:
s = [{'name': 'Bart', 'age': 12}, {'name': 'Bart', 'age': 19}, {'name': 'Bart', 'age': 1},
{'name': 'Homer', 'age': 30}, {'name': 'Homer', 'age': 12},{'name': 'Simpson', 'age': 19}]
res=[]
for m,n in zip(s, reversed(s)):
if m!=n:
res.append(m)
res.append(n)
else:
res.append(m)
if len(res)==len(s):
break
print res
它利用了您已經具有排序列表的事實。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.