Re: update a list element using an element in another list

2017-01-31 Thread Rhodri James

On 31/01/17 11:28, Daiyue Weng wrote:

Hi, I am trying to update a list of dictionaries using another list of
dictionaries correspondingly. In that, for example,

#  the list of dicts that need to be updated
dicts_1 = [{'dict_1': '1'}, {'dict_2': '2'}, {'dict_3': '3'}]

# dict used to update dicts_1
update_dicts = [{'dict_1': '1_1'}, {'dict_2': '1_2'}, {'dict_3': '1_3'}]

so that after updating,

dicts_1 = [{'dict_1': '1_1'}, {'dict_2': '1_2'}, {'dict_3': '1_3'}]

what's the best way to the updates?

This is actually coming from when I tried to create a list of entities
(dictionaries), then updating the entities using another list dictionaries
using google.cloud.datastore.

entities = [Entity(self.client.key(kind, entity_id)) for entity_id in
entity_ids]

# update entities using update_dicts
for j in range(len(entities)):
for i in range(len(update_dicts)):
if j == i:
entities[j].update(update_dicts[i])

I am wondering is there a brief way to do this.


This all relies on the lists being in the same order and the same 
length, which is probably an unwise assumption, but it's what your code 
does:


for entity, update_dict in zip(entities, update_dicts):
entity.update(update_dict)

range(len(something)) is usually a warning sign (code smell, if you 
prefer) that you aren't thinking in Python.  If you really need the list 
index for some nefarious purpose, enumerate(something) is probably still 
a better bet.


--
Rhodri James *-* Kynesim Ltd
--
https://mail.python.org/mailman/listinfo/python-list


Re: update a list element using an element in another list

2017-01-31 Thread Jussi Piitulainen
Daiyue Weng writes:

> Hi, I am trying to update a list of dictionaries using another list of
> dictionaries correspondingly. In that, for example,
>
> #  the list of dicts that need to be updated
> dicts_1 = [{'dict_1': '1'}, {'dict_2': '2'}, {'dict_3': '3'}]
>
> # dict used to update dicts_1
> update_dicts = [{'dict_1': '1_1'}, {'dict_2': '1_2'}, {'dict_3': '1_3'}]
>
> so that after updating,
>
> dicts_1 = [{'dict_1': '1_1'}, {'dict_2': '1_2'}, {'dict_3': '1_3'}]
>
> what's the best way to the updates?
>
> This is actually coming from when I tried to create a list of entities
> (dictionaries), then updating the entities using another list
> dictionaries using google.cloud.datastore.
>
> entities = [Entity(self.client.key(kind, entity_id)) for entity_id in
> entity_ids]
>
> # update entities using update_dicts
> for j in range(len(entities)):
> for i in range(len(update_dicts)):
> if j == i:
>entities[j].update(update_dicts[i])

[I restored the indentation.]

> I am wondering is there a brief way to do this.

A straightforward algorithmic improvement:

for j in range(len(entities)):
entities[j].update(update_dicts[j])

The real thing:

for e, u in zip(entities, update_dicts):
e.update(u)

A thing between those:

for j, e in enumerate(entities):
e.update(update_dicts[j])

(By symmetry, you could enumerate update_dicts instead.)

It pays to learn zip and enumerate.
-- 
https://mail.python.org/mailman/listinfo/python-list


update a list element using an element in another list

2017-01-31 Thread Daiyue Weng
Hi, I am trying to update a list of dictionaries using another list of
dictionaries correspondingly. In that, for example,

#  the list of dicts that need to be updated
dicts_1 = [{'dict_1': '1'}, {'dict_2': '2'}, {'dict_3': '3'}]

# dict used to update dicts_1
update_dicts = [{'dict_1': '1_1'}, {'dict_2': '1_2'}, {'dict_3': '1_3'}]

so that after updating,

dicts_1 = [{'dict_1': '1_1'}, {'dict_2': '1_2'}, {'dict_3': '1_3'}]

what's the best way to the updates?

This is actually coming from when I tried to create a list of entities
(dictionaries), then updating the entities using another list dictionaries
using google.cloud.datastore.

entities = [Entity(self.client.key(kind, entity_id)) for entity_id in
entity_ids]

# update entities using update_dicts
for j in range(len(entities)):
for i in range(len(update_dicts)):
if j == i:
entities[j].update(update_dicts[i])

I am wondering is there a brief way to do this.

cheers
-- 
https://mail.python.org/mailman/listinfo/python-list