python - 更新新词典在 Python 中不起作用

标签 python list dictionary

我的代码是这样的:

nic_map={'vmxnet3':['TrunkPortGroup1','TrunkPortGroup2'], 'vmxnet2':['DataPortGroup1','DataPortGroup2'], 'e1000':['MgmtPortGroup1','MgmtPortGroup2']}

network_list = ['TrunkPortGroup1', 'DataPortGroup1', 'MgmtPortGroup1', 'VM Network', 'External Network']

new_map = {}
for key in nic_map.keys():
    val_list = nic_map.get(key)
    list_comp = [net for net in network_list if net in val_list]
    for network in list_comp:
        new_map[key] = []
        new_map[key].extend(network)
print new_map

我想要这样的输出:{'vmxnet3':'TrunkPortGroup1', 'vmxnet2':'DataPortGroup1', 'e1000':'MgmtPortGroup1'}

但是我得到的输出是:

{'vmxnet3':'T','r','u','n','k','P','o','r','t','G' ,'r','o','u','p','1' 等...

知道我做错了什么吗?

最佳答案

你只想设置列表理解结果

list_comp = [net for net in network_list if net in val_list]
new_map[key] = list_comp

您正在使用 list.extend() 将每个单独的字符串添加到列表中;获取这些字符串的各个字符并将它们添加为单独的字符:

>>> lst = []
>>> lst.extend('Hello, world!')
>>> lst
['H', 'e', 'l', 'l', 'o', ',', ' ', 'w', 'o', 'r', 'l', 'd', '!']

通常你会使用 list.append() 代替:

>>> lst = []
>>> lst.append('Hello, world!')
>>> lst
['Hello, world!']

但是既然您已经建立了一个列表,为什么还要重建它呢?

可以进一步改进;无需显式调用 .keys(),因为遍历字典已经只生成键,我们可以在这里使用字典理解。只需遍历 dict.iteritems() 可迭代对象即可获取键和值:

new_map = {key: [net for net in network_list if net in value]
           for key, value in nic_map.iteritems()}

演示:

>>> nic_map = {'vmxnet3': ['TrunkPortGroup1', 'TrunkPortGroup2'], 'vmxnet2': ['DataPortGroup1', 'DataPortGroup2'], 'e1000': ['MgmtPortGroup1', 'MgmtPortGroup2']}
>>> network_list = ['TrunkPortGroup1', 'DataPortGroup1', 'MgmtPortGroup1', 'VM Network', 'External Network']
>>> {key: [net for net in network_list if net in value] for key, value in nic_map.iteritems()}
{'vmxnet2': ['DataPortGroup1'], 'vmxnet3': ['TrunkPortGroup1'], 'e1000': ['MgmtPortGroup1']}

关于python - 更新新词典在 Python 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23864699/

相关文章:

java - 在java中合并json对象

python - 多级字典python

python - 如何使用 QToolButton 或 QPushButton 将本地保存的 GeoJSON 加载到带有 QTableWidget 或 QTableTree 的 Qt 对话框中?

python - 获取用于 django 动态过滤器的 url 参数

python - 使用 Python 查找源代码中不在注释内的所有字符串

python - 系统找不到指定的路径 - FirefoxDriver.exe

python - 如何在 Python 中外部加入列表列表?

c - 在C中查找重复项

c# - 在 C# 中使用字典的正确方法是什么?

python - 使用多个字典复制字典键