我已经建立了一个嵌套的字典,它代表了一个用计数器估价的所有组合(笛卡尔积)。
夫妻隐含且(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提前。
答案 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}}