以下是我目前的情况:
from collections import defaultdict
output = [{'MPID': 'A', 'CLIENTNAME': 'AAA'},
{'MPID': 'C', 'CLIENTNAME': 'BBB'},
{'MPID': 'C1', 'CLIENTNAME': 'CCC'},
{'MPID': 'C2', 'CLIENTNAME': 'CCC'},
{'MPID': 'C3', 'CLIENTNAME': 'CCC'}]
d = defaultdict(list)
for item in output:
d[item['CLIENTNAME']].append(item['MPID'])
final = [{'CLIENTNAME': k, 'MPID': v} for k, v in d.items()]
print final
此输出合并匹配MPID
的{{1}}值。
输出:
CLIENTNAMES
我现在要做的是格式化一个包含每个MPID的所有排列的字符串,但仅限于字典包含多于1个MPID的情况。 (在此示例中,只有CCC具有多于1个MPID)。
这是我正在格式化的查询:
[{'MPID': ['A'], 'CLIENTNAME': 'AAA'},
{'MPID': ['C'], 'CLIENTNAME': 'BBB'},
{'MPID': ['C1', 'C2', 'C3'], 'CLIENTNAME': 'CCC'}]
此查询需要将所有MPIDS相互比较。所需的输出是:
query = '''x = '{}' and y = '{}' union
x = '{}' and y = '{}';'''
如您所见,X和Y值在字符串的第二行交换位置。
这部分的有效方法是什么?
感谢。
答案 0 :(得分:1)
您可以使用combinations
itertools
from itertools import combinations
combos = list(combinations(final[2]['MPID'], 2))
combos.sort(key=lambda x: x[1])
for combo in combos:
a, b = combo
print '''x = '{}' and y = '{}' union
x = '{}' and y = '{}';'''.format(a, b, b, a)
打印:
x = 'C1' and y = 'C2' union
x = 'C2' and y = 'C1';
x = 'C1' and y = 'C3' union
x = 'C3' and y = 'C1';
x = 'C2' and y = 'C3' union
x = 'C3' and y = 'C2';
如果该订单对您很重要,您可能需要调整sort
key
。