Python 2.7 使用同一组键在多个字典中查找不同的值
我有一个需要比较的多个词典的列表。列表中的词典数量将根据查询结果而变化 具有相同键但不同值的字典示例列表:Python 2.7 使用同一组键在多个字典中查找不同的值,python-2.7,dictionary,Python 2.7,Dictionary,我有一个需要比较的多个词典的列表。列表中的词典数量将根据查询结果而变化 具有相同键但不同值的字典示例列表: test = [{'a':'1','b':'1','c':'4'},{'a':'1','b':'2','c':'5'},{'a':'1','b':'3','c':'6'}] 所需输出: [{'b':'1','c':'4'},{'b':'2','c':'5'},{'b':'3','c':'6'}] {'a':'1'} {'b': '1', 'c': '4'} 我希望能够输出列表上不同
test = [{'a':'1','b':'1','c':'4'},{'a':'1','b':'2','c':'5'},{'a':'1','b':'3','c':'6'}]
所需输出:
[{'b':'1','c':'4'},{'b':'2','c':'5'},{'b':'3','c':'6'}]
{'a':'1'}
{'b': '1', 'c': '4'}
我希望能够输出列表上不同的键(带值的键)(如果有),如果没有,则输出一个空列表
我尝试了这个代码,但是它给了我相同值的代码
mysets = (set(x.items()) for x in test)
print reduce(set.intersection, mysets)
输出:
[{'b':'1','c':'4'},{'b':'2','c':'5'},{'b':'3','c':'6'}]
{'a':'1'}
{'b': '1', 'c': '4'}
我也试过这本,但它只给了我第一本字典上不同的一对
def IntersectDicts( d1, d2 ) :
return dict(filter(lambda (k,v) : k in d2 and d2[k] != v, d1.items()))
result = reduce(IntersectDicts, test)
print result
输出:
[{'b':'1','c':'4'},{'b':'2','c':'5'},{'b':'3','c':'6'}]
{'a':'1'}
{'b': '1', 'c': '4'}
我写了两个解决方案来解决你的问题
如果不想调用其他函数,请选择第一个解决方案。但是我推荐第二个解决方案,因为它更具可读性。我写了两个解决方案来解决您的问题
import copy
test = [{'a':'1','b':'1','c':'4'},{'a':'1','b':'2','c':'5'},{'a':'1','b':'3','c':'6'}]
ftest = copy.deepcopy(test)
keyy = ''
for d in range(len(test)):
ftest[d] = {}
for k, y in test[d].items():
for f in range(len(ftest)):
if k in ftest[f] and y == ftest[f].get(k):
keyy = k
ftest[f].pop(k)
test[f] = ftest[f]
if keyy:
test[d].pop(keyy)
keyy = ''
ftest = copy.copy(test)
print 'TESTINGGGGG ---------------------', test
请尝试此代码
import copy
test = [{'a':'1','b':'1','c':'4'},{'a':'1','b':'2','c':'5'},{'a':'1','b':'3','c':'6'}]
ftest = copy.deepcopy(test)
keyy = ''
for d in range(len(test)):
ftest[d] = {}
for k, y in test[d].items():
for f in range(len(ftest)):
if k in ftest[f] and y == ftest[f].get(k):
keyy = k
ftest[f].pop(k)
test[f] = ftest[f]
if keyy:
test[d].pop(keyy)
keyy = ''
ftest = copy.copy(test)
print 'TESTINGGGGG ---------------------', test
你想要哪种类型的????像{'a':'1','c':'6','b':'3'}对不起,我编辑了这个问题@user00000341,这是你想要输出哪种类型的第一个输出????像{'a':'1','c':'6','b':'3'}对不起,我编辑了问题@user0000341,这是第一个OUPUTTANKS@RockOnGom,我使用了第一个解决方案,尽管它只返回密钥。谢谢@RockOnGom,我使用了第一个解决方案,尽管它只返回密钥。