结合两个lis使用zip创建的词典

2024-04-24 22:55:03 发布

您现在位置:Python中文网/ 问答频道 /正文

当我使用zip函数从下面的两个列表创建字典时,并不是所有的键值对都存储在字典中

>>> selfips=['1.0.0.1', '165.1.4.5', '165.3.4.5', '165.3.4.4', '165.3.4.4']
>>> statefloatingselfips=['STATE_DISABLED', 'STATE_DISABLED', 'STATE_DISABLED', 'STATE_ENABLED', 'STATE_ENABLED']
>>> floatdict=dict(zip(statefloatingselfips, selfips))
>>> print floatdict
{'STATE_ENABLED': '165.3.4.4', 'STATE_DISABLED': '165.3.4.5'}

Tags: 函数列表字典enabledzipdict键值state
3条回答

不能有多个值相似的键。相反,您可以使用^{}对共享某个状态的所有IP进行set

from collections import defaultdict
d = defaultdict(set)
selfips=['1.0.0.1', '165.1.4.5', '165.3.4.5', '165.3.4.4', '165.3.4.4']
statefloatingselfips=[
    'STATE_DISABLED', 'STATE_DISABLED', 'STATE_DISABLED',
    'STATE_ENABLED', 'STATE_ENABLED'
]

for ip, state in zip(selfips, statefloatingselfips):
    d[state].add(ip)

print d

输出:

defaultdict(<type 'set'>, {
    'STATE_ENABLED': set(['165.3.4.4']),
    'STATE_DISABLED': set(['1.0.0.1', '165.3.4.5', '165.1.4.5'])
})

由于字典的键是唯一的,因此可以使用^{}执行以下任务:

>>> from collections import defaultdict
>>> d=defaultdict(list)
>>> for i,j in zip(statefloatingselfips, selfips):
...     d[i].append(j)
... 
>>> d
defaultdict(<type 'list'>, {'STATE_ENABLED': ['165.3.4.4', '165.3.4.4'], 'STATE_DISABLED': ['1.0.0.1', '165.1.4.5', '165.3.4.5']})
>>> 

你可能有字典状态:地址列表

map_by_state = collections.defaultdict(list)

for state, address in zip (statefloatingselfips, selfips):
    map_by_state[state].append(address)

相关问题 更多 >