Pythonic way for retrieving value for a nested dictionary.

L

Lowly Minion

For a typical dict:

i.e.
d = { '1': 'a', '2', 'b' }

I might use something like:

d.get('1', None)

To get the value of 1.

What would be the most pythonic way of getting a nested value of a dictionary within a list:

some_list = [{ 'item': { 'letter': 'b',
'word': 'bar' }},
{ 'item': { 'letter': 'c',
'word': 'charcoal' }}]

Currently I am looping through the list as such:

for item in some_list:
print item['item']['letter']

One other method explored was:
item.get('item').get('letter')

Is a double get the best way? Doesn't seem right to me.

Thank you in advance for your help
 
D

Dave Angel

For a typical dict:

i.e.
d = { '1': 'a', '2', 'b' }

I might use something like:

d.get('1', None)

To get the value of 1.

What would be the most pythonic way of getting a nested value of a dictionary within a list:

some_list = [{ 'item': { 'letter': 'b',
'word': 'bar' }},
{ 'item': { 'letter': 'c',
'word': 'charcoal' }}]

Currently I am looping through the list as such:

for item in some_list:
print item['item']['letter']

One other method explored was:
item.get('item').get('letter')

Is a double get the best way? Doesn't seem right to me.

Thank you in advance for your help


I'm not sure what the puzzle is. Use [key] if you know the key exists,
and use get( key, default) if you don't. But be aware that if the first
key doesn't exist, then the default had better be a dict (rather than
something like None), or the second lookup will throw an exception, even
if you use get.

One other possibility, depending on just what you're doing with the
data, is to wrap it in a try/catch.

However, if you know exactly what the keys are, perhaps you should use a
namedtuple instead of a dict.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,582
Members
45,062
Latest member
OrderKetozenseACV

Latest Threads

Top