【发布时间】:2021-09-22 12:43:47
【问题描述】:
有没有一种有效的方法来获取多个字典(的键)的交集?
类似于 iterating over shared keys in two dictionaries ,不同之处在于它的想法不是迭代而是获取集合,因此它可以用于获取 dicts 的子集。
d1 = {'a':[1,2], 'b':[2,2]}
d2 = {'e':[3,2], 'b':[5,1], 'a':[5,5]}
d3 = {'b':[8,2], 'a':[3,3], 'c': [1,2]}
所以手动相交很简单
d1.keys() & d2.keys() & d3.keys()
但是 n 维列表呢?我觉得有比这更好的方法:
d_list = [d1, d2, d3]
inter_keys = {}
for i in range(len(d_list)):
if i == 0:
inter_keys = d_list[i]
inter_keys = inter_keys & d_list[i].keys()
然后得到一个子集
subsets = []
for n in d_list:
subsets.append( {k: n[k] for k in inter_keys} )
最后用它来获取值子集
v = [ x.values() for x in subsets ]
- 真的最后一部分被格式化为
v = np.array([ np.array(list(x.values())) for x in subsets ])得到的ndarray 为:
[[[2 2] [1 2]]
[[5 1] [5 5]]
[[8 2] [3 3]]]
我在想可能有一种方法可以使用像 numpy where 这样的方法来更有效地获取子集,但不确定。
【问题讨论】:
-
where不是迭代器。它的参数是数组。 -
@hpaulj 是的,这就是为什么我认为可能有一种使用它的方法,因为我首先获得所有字典之间的共享键,我有一个键数组可能是一个长的 'or '声明。
-
d和subsets都是dict的列表。直到你收集到x.values(),你才能得到一个可以做成数组的列表。
标签: python numpy dictionary