簡體   English   中英

生成字典列表,但相鄰字典鍵/值不相等

[英]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}]

為了獲得我嘗試使用maplambda的任一必需輸出,其想法是將每個name元素與下一個元素name進行比較,如果它們不匹配,則交換值並返回結果列表。

下面是我正在嘗試的代碼:

map(lambda x: x if x['name']!=next(iter(x))['name'] else None, s)

next(iter(x)一件事是next(iter(x)沒有返回下一個元素),我也想知道為什么以及是否可以使用maplambda實現解決方案?

我根據您的要求寫了這個,盡管它不那么簡潔:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM