所以我有一个defaultdict(list) hashmap,潜在的术语
potential_terms={9: ['leather'], 10: ['type', 'polyester'], 13:['hello','bye']}
Run Code Online (Sandbox Code Playgroud)
我想要输出的是具有最低键的2个值(单词),所以'leather'肯定是第一个输出,但是'type'和'polyester'都有k=10,当键相同时,我想要随机选择“类型”或“聚酯”
我所做的是:
out=[v for k,v in sorted(potential_terms.items(), key=lambda x:(x[0],random.choice(x[1])))][:2]
Run Code Online (Sandbox Code Playgroud)
但是当我打印时out我得到:
[['皮革'],['类型','聚酯纤维']]
我的猜测当然是 lambda 函数的第二部分:random.choice(x[1])。关于如何通过输出“类型”或“聚酯”使其按预期工作有什么想法吗?
谢谢
编辑:请参阅Karl 的回答和评论,了解为什么此解决方案对于 OP 的问题不正确。我把它留在这里是因为它确实证明了 OP 最初出错的地方。
key=不转换数据本身,它只告诉sorted如何排序,
您想在选择它进行理解时应用choiceon ,如下所示:v
out=[random.choice(v) for k,v in sorted(potential_terms.items())[:2]]
Run Code Online (Sandbox Code Playgroud)
(我还将 [:2] 移到了里面,以缩短理解之前的列表)
输出:
['leather', 'type']
Run Code Online (Sandbox Code Playgroud)
或者
['leather', 'polyester']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
248 次 |
| 最近记录: |