Reputation: 588
This is my list of dictionary
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'}]
I want to append node-
as a prefix to the value
for the key
node_name
. I want the output to be like the below
[{'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'}]
Any help is much appreciated.
Upvotes: 0
Views: 58
Reputation: 30200
The other answers all create n new dictionaries and a new list to hold them.
It seems like a waste to do all this just to fit it in one line.
for d in x:
if 'node_name' in d:
d['node_name'] = 'node-'+d['node_name']
Will just modify one dictionary entry and not create any new objects (outside of replacing the strings).
If you knew the key to be in each dictionary,
for d in x: d['node_name'] = 'node-'+d['node_name']
boom - one line...
Upvotes: 2
Reputation: 1235
Here using map
and dictionary unpacking
, also works in 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'}
Upvotes: 0
Reputation: 71451
You can use dictionary unpacking:
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]
Output:
[{'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'}]
Upvotes: 1