<p>如果任何不包含重复项的组合都是可以接受的,那么您可以简单地迭代<code>data</code>列表,并将当前元素附加到结果中不存在任何ID的第一个元素</p>
<pre><code>def split(list_of_dicts):
result_helper = [set()] # This will be a list of sets for easy membership checks
result_list = [[]] # This will be what we return
for d in list_of_dicts:
for s, l, in zip(result_helper, result_list):
if not any(x in s for x in d["ids"]):
s.update(d["ids"])
l.append(d)
break
else:
# for loop ended without being broken
# This means no elements of result_list took this dict item.
# So create a new element
result_list.append([d])
result_helper.append(set(d["ids"]))
return result_list
</code></pre>
<p>用你的原始数据</p>
<pre><code>data = [
{"ids": [1]},
{"ids": [3, 4]},
{"ids": [1, 2]},
{"ids": [2]},
]
split(data)
</code></pre>
<p>我们得到的结果是:</p>
<pre><code> [
[{'ids': [1]}, {'ids': [3, 4]}, {'ids': [2]}],
[{'ids': [1, 2]}]
]
</code></pre>
<p>这似乎是一个可接受的解决方案,因为所有列表都没有重复的id</p>
<p>第二个例子是:</p>
<pre class="lang-py prettyprint-override"><code>data = [
{"ids": [1]},
{"ids": [3, 4]},
{"ids": [1, 2]},
{"ids": [4]},
{"ids": [3]},
{"ids": [2]},
]
split(data)
</code></pre>
<p>这将提供以下输出:</p>
<pre><code> [
[{'ids': [1]}, {'ids': [3, 4]}, {'ids': [2]}],
[{'ids': [1, 2]}, {'ids': [4]}, {'ids': [3]}]
]
</code></pre>
<p>在这种情况下也没有重复</p>