删除嵌套字典中隐式嵌套的重复对

时间:2017-06-22 13:12:00

标签: python dictionary

我已经建立了一个嵌套的字典,它代表了一个用计数器估价的所有组合(笛卡尔积)。

夫妻隐含且(g1,g2)与(g2,g1)相同

这是我的结构代码

counters_in_group = dict((group,0) for group in arr)
counters = dict((group, dict(counters_in_group)) for group in arr)
print(counters)

说组是arr = [7272463, 8980365, 7047095]我得到了这个

{7047095: {7272463: 0, 8980365: 0, 7047095: 0}, 8980365: {7272463: 0, 8980365: 0, 7047095: 0}, 7272463: {7272463: 0, 8980365: 0, 7047095: 0}}

我想简单地删除重复项

{7047095: {7272463: 0, 8980365: 0, 7047095: 0}, 8980365: {7272463: 0, 8980365: 0}, 7272463: {7272463: 0}}

我希望问题很明确,如果需要,我会尽量澄清。

Thnak提前。

2 个答案:

答案 0 :(得分:3)

鉴于元素是可订购的(因此定义了<=int,...等str关系,您可以使用以下嵌套字典理解:

{k1:{k2:v2 for k2,v2 in v1.items() if k1 <= k2} for k1,v1 in counters.items()}

这会创建:

>>> {k1:{k2:v2 for k2,v2 in v1.items() if k1 <= k2} for k1,v1 in counters.items()}
{7047095: {7272463: 0, 8980365: 0, 7047095: 0}, 8980365: {8980365: 0}, 7272463: {8980365: 0, 7272463: 0}}

代码的工作原理如下:对于每对(g1,g2),我们只需将值放入生成的字典中,当且仅当g1 <= g2时。这意味着添加了两个重复项中的一个,并删除了一个。

答案 1 :(得分:3)

>>> {k: dict.fromkeys(arr[i:], 0) for i, k in enumerate(arr)}
{7047095: {7047095: 0}, 8980365: {8980365: 0, 7047095: 0}, 7272463: {7047095: 0, 8980365: 0, 7272463: 0}}

>>> {k1: {k2: 0 for k2 in arr[i:]} for i, k1 in enumerate(arr)}
{7047095: {7047095: 0}, 8980365: {8980365: 0, 7047095: 0}, 7272463: {7047095: 0, 8980365: 0, 7272463: 0}}