更新新词典在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]=[]移动到循环之外。啊,我正在尝试听写理解,后来找到了更新的答案。非常感谢!啊,我试着听写理解,后来找到了你最新的答案。非常感谢!