使用字典值的排列进行字符串格式化

时间:2018-06-14 17:05:17

标签: python

以下是我目前的情况:

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值在字符串的第二行交换位置。

这部分的有效方法是什么?

感谢。

1 个答案:

答案 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