如果这个问题措辞严厉,我道歉。
我的脚本正在对交易消息进行比较,写成字符串值,我希望看到是否有一个字段出现在一个消息中,而不是另一个消息中。使用的两个消息的示例是:
msg1 = ['35=D', '52=20160429', '11=0001A', '44=440', '15=EUR']
msg2 = ['35=D', '52=20160428', '11=0001B', '44=439', '15=EUR']
要比较列表,我正在使用:
result = [o for o in a if o not in b]
现在,我的脚本为我提供了完全匹配的元素,例如:
nonmatches = ['52=20160428', '11=0001B', '44=439']
这对我不起作用,因为标签仍然存在于两个消息中。所以我的问题是 - 如何在每个元素的前三个字符后比较两个列表?
答案 0 :(得分:2)
您确定列表表示是您数据的最佳容器吗?也许你应该使用字典
msg1 = ['35=D', '52=20160429', '11=0001A', '44=440', '15=EUR']
msg2 = ['35=D', '52=20160428', '11=0001B', '44=439', '15=EUR']
d1 = {key:value for key,value in [item.split('=',1) for item in msg1]}
d2 = {key:value for key,value in [item.split('=',1) for item in msg2]}
现在您的数据存储在dict中
print(d1)
# {'15': 'EUR', '44': '440', '11': '0001A', '35': 'D', '52': '20160429'}
print (d1.keys())
# dict_keys(['15', '44', '11', '35', '52'])
现在你可以使用比@ Phillip-Martin上面的答案更好的集合操作。
例如:
# All different keys
d1.keys() ^ d2.keys()
# Keys in d1 not in d2
d1.keys() - d2.keys()
# Keys in d2 not in d1
d2.keys() - d1.keys()
答案 1 :(得分:1)
像@avinash所说,使用切片:
result = [o for o in msg1 if o[3:] not in [field[3:] for field in msg2]]
答案 2 :(得分:-1)
我真的不明白你的意思。你想在msg1中找到不同的元素吗? 我在这里提供答案。
In [21]: msg1 = ['35=D', '52=20160429', '11=0001A', '44=440', '15=EUR']
In [22]: msg2 = ['35=D', '52=20160428', '11=0001B', '44=439', '15=EUR']
In [23]: [o for o in msg1 if o not in msg2]
Out[23]: ['52=20160429', '11=0001A', '44=440']