Reputation: 23
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
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
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
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