回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我有一个元组列表。每个元组是一个键-值对,其中键是一个数字,值是一个字符串。对于每个键,我需要以列表形式返回前两个字符及其计数。你知道吗</p>
<p>例如,给定列表</p>
<pre><code>[(1, "aabbc"), (1, "babdea"), (2, "aabacc"), (2, "acdad")]
</code></pre>
<p>键为1和2,值为</p>
<pre><code>"aabbc", "babdea", ..., "acdaad"
</code></pre>
<p>元组可以转换成</p>
<pre><code>(1, {"a":2, "b":2, "c":1}),(1,{"a":2, "b":2, "d":1,"e":1})...(2,{"a":2, "c":1, "d":2})
</code></pre>
<p>对于键1,组合元组将是</p>
<pre><code>(1,{"a":4, "b":4, "c":1, "d":1,"e":1})
</code></pre>
<p>所以最重要的两个人物是</p>
<pre><code>[("a",4),("b",4)]
</code></pre>
<p>每个键都会重复这个过程</p>
<p>我能够得到我想要的输出,但我正在寻找一个更好的解决方案</p>
<pre><code>from collections import Counter
l=[(x[0],list(x[1])) for x in [(1, "aabbc"), (1, "babdea"), (2, "aabacc"), (2, "acdad")]]
l2=[(y[0],Counter(y[1])) for y in l]
l3=[(x[0][1],x[1][1]) for x in it.combinations(l2,2) if x[0][0]==x[1][0] ]
l4=[]
for t,y in l3:
d={}
l5=list(set(t.keys()).union(y.keys()))
for i in l5:
d[i]=t[i]+y[i]
d_sort=sorted(d.items(), key=lambda x: x[1], reverse=True)[:2]
l4.append(d_sort)
print l4
[[('a', 4), ('b', 4)], [('a', 5), ('c', 3)]]
</code></pre>