FL.S
FL.S

Reputation: 23

How to iterate dict in string.format

I read a lot of tutorials, but can not find how to iterate dict in string.format like this:

dict = {'this':'I','is':'am','title':'done'}
print(f'the key is {k for k,v in dict}')
print(f'the val is {v for k,v in dict}')

which I want a result like this:

the key is this is title
the val is I am done

so I can print variable length dict.

dict = {'this':'I','is':'am','title':'done'}
print(f'the key is {k for k,v in dict}')
print(f'the val is {v for k,v in dict}')

Then I got error.

Upvotes: 2

Views: 741

Answers (3)

Anomitra
Anomitra

Reputation: 1161

print("The keys are", ' '.join(k for k in dict)) for the keys

print("The keys are", ' '.join(v for k, v in dict.items())) for the values

Upvotes: 0

S.B
S.B

Reputation: 16476

Currently your output is:

the key is <generator object <genexpr> at 0x7fbaca5443c0>
the val is <generator object <genexpr> at 0x7fbaca5443c0>

That's because k for k,v in dict is a generator expression. Don't confuse it with set comprehension, those curly braces are for f-string.

But of course that k for k,v in dict is problematic. When you iterate over a dictionary itself, it gives you keys. So for the first iteration "this" comes back. you can't unpack "this" into two variables. k, v = "this".

You can use this:

d = {"this": "I", "is": "am", "title": "done"}
print(f'the key is {" ".join(d.keys())}')
print(f'the val is {" ".join(d.values())}')

output:

the key is this is title
the val is I am done

This join works because keys and values are strings in your dictionary. If they are not, you should convert them like:

print(f'the key is {" ".join(map(str, d.values()))}')

For the first one you could also use print(f'the key is {" ".join(d)}') as dictionaries will give keys in the iteration by default.

Upvotes: 2

Daniel Ara&#250;jo
Daniel Ara&#250;jo

Reputation: 3

I would do this, if you don't mind having a space at the end I'm no expert tho:

mydict = {"this": "I", "is": "am", "title": "done"}


def get_str(dict):
    str_a = ""
    str_b = ""
    for k in dict:
        str_a += f"{k} "
        str_b += f"{dict[k]} "
    print(str_a)
    print(str_b)


get_str(mydict)

output:

this is title 
I am done 

Upvotes: 0

Related Questions