Infonauten
Infonauten

Reputation: 13

Looping over a list within a dict

I'm new to python, so bear with me. I have a dict containing lists:

ophav = {'ill': ['Giunta, John'], 'aut': ['Fox, Gardner', 'Doe, John'], 'clr': ['Mumle, Mads'], 'trl': ['Cat, Fat']}

The key names ('ill', 'aut', ...) and the number of items in the lists will be different on each run of the script.

I'd love to do something like:

opfmeta = []
for key, person in ophav.items():
    opfmeta.append('<dc:creator role="' + key + '">' + person + '</dc:creator>')

I know this is not working ("cannot concatenate 'str' and 'list' objects") - I have to loop over the list within the dict somehow. How do I do that?

Edit: I need separate entries for each person, like:

<dc:creator role="ill">Fox, Gardner</dc:creator>
<dc:creator role="ill">Doe, John</dc:creator>

Upvotes: 1

Views: 79

Answers (1)

sshashank124
sshashank124

Reputation: 32189

You can do that using ' & '.join():

opfmeta = []
for key, person in ophav.items():
    opfmeta.append('<dc:creator role="' + key + '">' + ' & '.join(person) + '</dc:creator>')

This will join all the elements of the list together with the specified delimiter (in this case ' & ') so your result will something like this:

<dc:creator role="ill">Fox, Gardner & Doe, John</dc:creator>

You can check out the full working demonstration HERE

Answer to your updated question:

ophav = {'ill': ['Giunta, John'], 'aut': ['Fox, Gardner', 'Doe, John'], 'clr': ['Mumle, Mads'], 'trl': ['Cat, Fat']}

opfmeta = []
for key, person in ophav.items():
    for i in person:
        opfmeta.append('<dc:creator role="' + key + '">' + i + '</dc:creator>')

for i in opfmeta:
    print i

[OUTPUT]
<dc:creator role="ill">Giunta, John</dc:creator>
<dc:creator role="aut">Fox, Gardner</dc:creator>
<dc:creator role="aut">Doe, John</dc:creator>
<dc:creator role="clr">Mumle, Mads</dc:creator>
<dc:creator role="trl">Cat, Fat</dc:creator>

NEW DEMO

Upvotes: 5

Related Questions