因此,我得到了充满字典的列表,其中有两个名称(name00和name01)。这些是链接集群的名称,并且总是有所有组合可用。可以从2个或更多簇中创建组合,结果变量中可以有更多组合。
在此示例中,我将具有3个不同名称(1、2、3)和2个不同名称(4、5)的群集链接在一起,但是可以更多。
我需要过滤结果,以便仅获得唯一的组合(两种方式分别为name00和name01),并且仅针对其中一个群集。例如,如果选择test1作为main,则可以在示例中丢弃test2-test3的组合。
我希望这个例子能使之清楚。
results = [
{ 'name00': 'test1', 'name01': 'test2' },
{ 'name00': 'test1', 'name01': 'test3' },
{ 'name00': 'test2', 'name01': 'test1' },
{ 'name00': 'test2', 'name01': 'test3' },
{ 'name00': 'test3', 'name01': 'test1' },
{ 'name00': 'test3', 'name01': 'test2' },
{ 'name00': 'test4', 'name01': 'test5' },
{ 'name00': 'test5', 'name01': 'test4' }
]
# Desired result
results = [
{ 'name00': 'test1', 'name01': 'test2' },
{ 'name00': 'test1', 'name01': 'test3' },
{ 'name00': 'test4', 'name01': 'test5' }
]
答案 0 :(得分:1)
所有对都出现在列表中,实现应该足够简单。
对列表进行排序。 “下部”标签将位于前面。特别是,第一个条目将是一个可行的主要元素。将每个此类链接放入结果列表,并跟踪第二个元素。然后跳过以“其他”名称开头的链接。重复此过程,直到您覆盖了整个原始列表。这是一个痛苦的详细版本:
start = [
{ 'name00': 'test1', 'name01': 'test2' },
{ 'name00': 'test1', 'name01': 'test3' },
{ 'name00': 'test2', 'name01': 'test1' },
{ 'name00': 'test2', 'name01': 'test3' },
{ 'name00': 'test3', 'name01': 'test1' },
{ 'name00': 'test3', 'name01': 'test2' },
{ 'name00': 'test4', 'name01': 'test5' },
{ 'name00': 'test5', 'name01': 'test4' }
]
result = []
start.sort(key=lambda link: link["name00"]+link["name01"])
for link in start:
print(link)
link_key = None
pos = 0
while pos < len(start):
other_name = []
link = start[pos]
if not link_key:
link_key = link['name00']
# Gather all of the links that start with the lowest name.
# Keep track of the other names for later use.
while start[pos]['name00'] == link_key:
link = start[pos]
result.append(link)
other_name.append(link["name01"])
pos += 1
# Now is "later" ... ignore all links that start with other names.
while pos < len(start) and \
start[pos]['name00'] in other_name:
link = start[pos]
pos += 1
link_key = None
# Print the resulting pairs
for link in result:
print(link["name00"], link["name01"])
输出:
test1 test2
test1 test3
test4 test5
答案 1 :(得分:0)
不确定,但这是我的理解:
如果出现以下情况,则结果中的 i 和 j 中的两个元素被认为是相等的:primary_color
和i['name00'] == j['name00']
)或i['name01'] == j['name01']
和i['name01'] == j['name00']
)。对吗?
在这种情况下,您可以定义一个键,该键通过对值'name00'/'name01'进行排序进行比较,然后使用该键将所有项存储在字典中以消除重复项。
例如:
i['name00'] == j['name01']
您得到:
def key(item):
return frozenset([item['name00'], item['name01']])
by_key = {key(item): item for item in results}
pprint.pprint(sorted(by_key.values()))