Добавить строку к определенным значениям в списке словаря - Python - PullRequest
0 голосов
/ 07 декабря 2018

Это мой список словарей

pool = [{'node_name': '198', 'port': '22'}, {'node_name': '199','port':'22'}, 
{'node_name': '200', 'port': '22'}, {'node_name': '201', 'port': '22'}, 
{'node_name': '202', 'port': '22'}, {'node_name': '203', 'port': '22'}, 
{'node_name': '204', 'port':'22'}, {'node_name': '205', 'port': '22'}] 

Я хочу добавить node- в качестве префикса к value для key node_name.Я хочу, чтобы результат был таким, как показано ниже

[{'node_name': 'node-198', 'port': '22'}, {'node_name': 'node- 
199','port':'22'}, 
{'node_name': 'node-200', 'port': '22'}, {'node_name': 'node-201', 'port': 
'22'}, {'node_name': 'node-202', 'port': '22'}, {'node_name': 'node-203', 
'port': '22'}, {'node_name': 'node-204', 'port':'22'}, {'node_name': 'node- 
 205', 'port': '22'}] 

Любая помощь очень ценится.

Ответы [ 3 ]

0 голосов
/ 07 декабря 2018

Здесь используются map и dictionary unpacking, также работает в Python 3.5:

>>> new_pool = list(map(lambda x: {**x,'node_name':'node-{}'.format(x['node_name'])},pool))

>>> print(*new_pool,sep='\n')
{'node_name': 'node-198', 'port': '22'}
{'node_name': 'node-199', 'port': '22'}
{'node_name': 'node-200', 'port': '22'}
{'node_name': 'node-201', 'port': '22'}
{'node_name': 'node-202', 'port': '22'}
{'node_name': 'node-203', 'port': '22'}
{'node_name': 'node-204', 'port': '22'}
{'node_name': 'node-205', 'port': '22'}
0 голосов
/ 07 декабря 2018

Все остальные ответы создают n новых словарей и новый список для их хранения.

Кажется бесполезным делать все это, просто помещая его в одну строку.

for d in x:
    if 'node_name' in d:
        d['node_name'] = 'node-'+d['node_name']

Просто изменит одну словарную запись и не создаст никаких новых объектов (кроме замены строк).

Если вы знали, что ключ находится в каждом словаре,

for d in x: d['node_name'] = 'node-'+d['node_name']

бум - одна строка ...

0 голосов
/ 07 декабря 2018

Вы можете использовать словарь для распаковки:

pool = [{'node_name': '198', 'port': '22'}, {'node_name': '199','port':'22'}, {'node_name': '200', 'port': '22'}, {'node_name': '201', 'port': '22'}, {'node_name': '202', 'port': '22'}, {'node_name': '203', 'port': '22'}, {'node_name': '204', 'port':'22'}, {'node_name': '205', 'port': '22'}] 
new_pool = [{**i, 'node_name':f'node-{i["node_name"]}'} for i in pool]

Вывод:

[{'node_name': 'node-198', 'port': '22'}, {'node_name': 'node-199', 'port': '22'}, {'node_name': 'node-200', 'port': '22'}, {'node_name': 'node-201', 'port': '22'}, {'node_name': 'node-202', 'port': '22'}, {'node_name': 'node-203', 'port': '22'}, {'node_name': 'node-204', 'port': '22'}, {'node_name': 'node-205', 'port': '22'}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...