逐行打印字典元素

问题描述 投票:0回答:4

我的文件中有一个字典,我应该编写一个Python代码来在单独的行中打印键和值。(不使用.keys()和.values()。

例如: dict={"the":"1", "and":"2"} 应返回为

the:1          
and:2 

这是我尝试过的代码。我是 python 字典的新手。请帮我解决这个问题。

dict2 = {}

f= open("dict.txt", 'r')
    for line in f:
        it = line.split()
        k, v = it[0], it[1:]
        dict2[k] = v
return (dict2)
python
4个回答
2
投票

line.split()
在空白处分割。您可能想要
line.split(':')

>>> "the:1".split()
['the:1']
>>> "the:1".split(':')
['the', '1']

还要注意的是

it = line.split(':')
k, v = it[0], it[1:]

可以简化为

k, v = line.split(':')

编辑:实际上这两个做不同的事情,但由于

line.split()
应该只有 2 个元素,
k, v = line.split(':')
会做你想做的事情,而
it[1:]
会返回
['1']
而不是
'1'

虽然我想你可以更优雅地处理解析问题:

it = line.split()
if len(it) != 2:
    print "Error!"
k, v = it[0], it[1]  # note it[1] and not it[1:]

0
投票

如果您尝试使用标准字典以与文件中出现的顺序相同的顺序从字典中打印键值,则这是行不通的(Python 字典对象不保持顺序)。假设您想按 dicts 值的值打印...

lines = ["the 1", "and 2"]
d = {}

for l in lines:
    k, v = l.split()
    d[k] = v

for key in sorted(d, key=d.get, reverse=True):
    print ":".join([key, d[key]])

假设您可以使用

lambda
和字符串连接。

lines = ["the 1", "and 2"]
d = {}

for l in lines:
    k, v = l.split()
    d[k] = v

for key in sorted(d, key=lambda k: d[k], reverse=True):
    print key + ":" + d[key]

没有 lambda

for value, key in sorted([(d[k], k) for k in d], reverse=True):
    print key + ":" + value

用它来创建一个函数

def lines_to_dict(lines):
    return_dict = {}
    for line in lines:
        key, value = line.split()
        return_dict[key] = value

    return return_dict

if __name__ == "__main__":

    lines = ["the 1", "and 2"]
    print lines_to_dict(lines)

0
投票

只要键/值都是字符串,就可以解析字典并提取元素。请注意,由于这实际上并没有创建字典,因此重复的元素和顺序被保留 - 您可能希望考虑到这一点。

import ast

text = '{"the":"1", "and":"2"}'
d = ast.parse(text).body[0].value
for k, v in zip(d.keys, d.values):
    print '{}:{}'.format(k.s, v.s)

0
投票
dictionary3={}
for element7 in range(int(input())):
    dictionary3[input()]=input[]
for element5 in dictionary3:
    print({element5:dictionary3[element5]})

我们输入的数字是一个字符串,应该将其转换为整数,因为它会导致错误。

© www.soinside.com 2019 - 2024. All rights reserved.