在python 3.x中迭代一个不太普通的字典



可能这是关于遍历字典的普通问题。请看下面的imovel.txt文件,其内容如下:

{Andar:["不到"、"segundo",' terceiro '],"Apto":(' 101 ',' 201 ',' 301 ']}

正如你所看到的,这不是一个普通的字典,有一个键值对;但是一个键有一个列表作为key和另一个列表作为value

我的代码是:
#/usr/bin/python
def load_dict_from_file():
f = open('../txt/imovel.txt','r')
data=f.read()
f.close()
return eval(data)
thisdict = load_dict_from_file()
for key,value in thisdict.items():
print(value)

和产量:

["不到"、"segundo","terceiro")("101"、"201"、"301")

我想打印一个键,值对,如

{"不到":"101年,"塞贡多":"201"、"terceiro‘:’301’}

给定上面的文本文件,这是可能的吗?

你应该使用内置的json模块来解析,但无论哪种方式,你仍然会有相同的结构。

你可以做一些事情。如果您知道两个基本键名('Andar''Apto'),您可以通过zip将值ping在一起来完成一行dict推导。

# what you'll get from the file
thisdict = {'Andar': ['primeiro', 'segundo', 'terceiro'], 'Apto': ['101','201','301']}
# One line dict comprehension
newdict = {key: value for key, value in zip(thisdict['Andar'], thisdict['Apto'])}
print(newdict)

如果你不知道键的名字,你可以在迭代器上调用next,假设它们是结构体中的前两个列表。

# what you'll get from the file
thisdict = {'Andar': ['primeiro', 'segundo', 'terceiro'], 'Apto': ['101','201','301']}
# create an iterator of the values since the keys are meaningless here
iterator = iter(thisdict.values())
# the first group of values are the keys
keys = next(iterator, None)
# and the second are the values
values = next(iterator, None)
# zip them together and have dict do the work for you
newdict = dict(zip(keys, values))
print(newdict)

正如其他人注意到的那样,这看起来像JSON,解析它可能更容易。但如果出于某种原因不能这样做,如果每个键处的所有列表长度相同,则可以这样查看字典:

for i, res in enumerate(dict[list(dict)[0]]):
ith_values = [elem[i] for elem in dict.values()]
print(ith_values)

如果它们都是不同的长度,那么你需要添加一些逻辑来检查并打印一个空白或做一些错误处理,以查看列表的末尾。

相关内容

  • 没有找到相关文章

最新更新