[英]pythonic way to filter a dictionary of arrays
我有一本看起来像这样的字典:
d = { 'a':['a','b','c','d'], 'b':['a','b','c','d'], 'c':['a','b','c','d'], 'd':['a','b','c','d'], }
我想将此字典简化为一个新字典,该字典包含从全部键集中随机选择的2个键,并且还仅包含与那些随机键相对应的值。
这是我编写的有效代码,但我觉得可能有更多的Python方式可以做到,有什么建议吗?
import random d = { 'a':['a','b','c','d'], 'b':['a','b','c','d'], 'c':['a','b','c','d'], 'd':['a','b','c','d'], } new_d = {} r = d.keys() random.shuffle(r) r = r[:2] r_dict = dict( (k,True) for k in r) for k in r_dict: a = tuple(d[k]) new_a = [] for item in a: if item in r_dict: new_a.append(item) new_d[k] = new_a
“ new_d”已过滤字典,例如:
{'a': ['a', 'b'], 'b': ['a', 'b']}
如果'a'和'b'是两个随机密钥。
ks = set(random.sample(d.keys(), 2))
nd = dict( (k, list(v for v in d[k] if v in ks)) for k in ks )
怎么样:
import random
rk = random.sample(d.keys(),2)
new_d = {}
for k in rk:
new_d[k] = list(set(d[k]).intersection(rk))
在FM的基础上,使用未充分使用的集合类型:
>>> ks = set(random.sample(d, 2))
>>> dict((k, list(ks & set(d[k]))) for k in ks)
{'a': ['a', 'c'], 'c': ['a', 'c']}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.