如何两层 for 循环,求出两个字典的不同值?

2019-11-01 12:04:27 +08:00
 css3

对比这两个字典,把 Hobby 里边的新增出来的,两层 for 是咋弄的(想学)? 除了两个 for, 还有没有简便方法拼接成个新的列表: 要的结果:

# 结果
ret= [{
 	'Name': 'Tom',
 	'Age': '7',
 	'Hobby': [
 	{
 		'key': 'society',
 		'value': 'citizen'
 	}]
 }]
# 样本:
s1 = [{
 	'Name': 'Tom',
 	'Age': '7',
 	'Hobby': [{
 		'key': 'life',
 		'value': 'motion'
 	}, {
 		'key': 'jobs',
 		'value': 'SoftwareDevelopment'
 	}, {
 		'key': 'family',
 		'value': 'grandfather'
 	}]
 }]

s2 =  [{
 	'Name': 'Tom',
 	'Age': '7',
 	'Hobby': [{
 		'key': 'life',
 		'value': 'motion'
 	}, {
 		'key': 'jobs',
 		'value': 'SoftwareDevelopment'
 	}, {
 		'key': 'family',
 		'value': 'son'
 	},
 	{
 		'key': 'society',
 		'value': 'citizen'
 	}]
 }]




2642 次点击
所在节点    Python
5 条回复
controller
2019-11-01 12:37:10 +08:00
这是 list,不是 map。依次对比可以用两次 for,而不是两层 for。。。
imn1
2019-11-01 12:43:47 +08:00
你先要定下规则,因为你的结果中 name/age 是求相同的,hobby 是求不同的

如果仅仅是比较 hobby 的话,[x not in s1[0]['Hobby'] for x in s2[0]['Hobby']]
ClericPy
2019-11-01 12:44:00 +08:00
如果是固定字段, 直接就是 list_new[len(list_old):]
wysnylc
2019-11-01 12:51:37 +08:00
A,B 两个数据集合
把 B 转成 map
循环 A,每次循环取在 map 中 get,取到为有取不到就木得
多简单啊
css3
2019-11-01 13:53:47 +08:00
@imn1 只要新增的,值不一样的要忽略

@controller 不会

@ClericPy 测试了一下,有效👍👍,好简单啊

@wysnylc 不会

想找个 for 循环的学习学习,有哪位大佬写一下,我拜读一下吗😥

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/615193

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX