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