Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更新新词典在Python中不起作用_Python_List_Dictionary - Fatal编程技术网

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

更新新词典在Python中不起作用,python,list,dictionary,Python,List,Dictionary,我的代码如下: nic_map={'vmxnet3':['TrunkPortGroup1','TrunkPortGroup2'], 'vmxnet2':['DataPortGroup1','DataPortGroup2'], 'e1000':['MgmtPortGroup1','MgmtPortGroup2']} network_list = ['TrunkPortGroup1', 'DataPortGroup1', 'MgmtPortGroup1', 'VM Network', 'Exter

我的代码如下:

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:

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

可以进一步改进;不需要显式调用.keys,因为在字典上循环已经只产生了键,我们可以在这里使用dict理解。只需在dict.iteritems iterable上循环即可获得键和值:

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

您只想设置列表理解结果

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:

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

可以进一步改进;不需要显式调用.keys,因为在字典上循环已经只产生了键,我们可以在这里使用dict理解。只需在dict.iteritems iterable上循环即可获得键和值:

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


您的for network in list_comp循环也会在循环的每次迭代中覆盖新的_map[key]。如果这是预期的功能,那么您可以使用行new_map[key]=listlist_comp[-1:]替换整个循环,否则您可能应该将新的_map[key]=[]移动到循环之外。for network in list_comp循环也会在循环的每次迭代中覆盖new_map[key]。如果这是预期的功能,那么您可以用行new_map[key]=listlist\u comp[-1:]替换整个循环,否则您可能应该将新的_map[key]=[]移动到循环之外。啊,我正在尝试听写理解,后来找到了更新的答案。非常感谢!啊,我试着听写理解,后来找到了你最新的答案。非常感谢!