繁体   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