【问题标题】:Retrieving a list of Dictionaries from Nested Dictionary with an Input from User使用来自用户的输入从嵌套字典中检索字典列表
【发布时间】:2021-06-06 00:18:01
【问题描述】:

我对 Python 有点陌生,我正在使用 Python 3。我想做的是从嵌套字典中检索字典列表,并使用与用户输入的内容类似的键。

这就是我正在做的事情

import pickle
import os
os.system("cls")

p_inputs = {
 'DOE, JOHN': {'SEX': 'MALE', 'AGE': 18},
 'DOE, JANE': {'SEX': 'FEMALE', 'AGE': 18},
 'WEST, MARIA': {'SEX': 'FEMALE', 'AGE': 18}}

print("Please enter the necessary information.")
new_name = input("\nFULL NAME, SURNAME FIRST: ").upper()
new_sex =  input("SEX: ").upper()
new_age = int(input("AGE: "))

p_inputs[new_name] = {'SEX': new_sex, 'AGE': new_age,}
pickle.dump(p_inputs, open("info", "wb"))

现在,当我在要求用户输入的位置插入一行时,我应该怎么做,例如,我要求输入年龄。然后用户输入“18”,如何获取年龄为18岁的人的所有字典列表?

如果我错了,我深表歉意。

【问题讨论】:

  • 人们的字典列表应该来自哪里?
  • 它们也应该由用户输入,我使用 pickle 来保存用户输入的内容。我做得对吗?
  • 我编辑了帖子以提供人员列表示例。

标签: python dictionary pickle


【解决方案1】:

首先您需要像这样加载现有数据:

with open("info", "rb") as f:
    p_inputs = pickle.load(f)

然后你可以做一个字典理解:

>>> {k: v for k,v in p_inputs.items() if v["AGE"] == 18}
{'name2': {'SEX': 'sex1', 'AGE': 18}, 'name3': {'SEX': 'sex2', 'AGE': 18}}

顺便说一句:目前你会覆盖字典并只存储最新的人。


编辑:完整解决方案

import os
import pickle

os.system("cls")

try:
    with open("info", "rb") as f:
        p_inputs = pickle.load(f)
except FileNotFoundError:
    p_inputs = {}

print("Please enter the necessary information.")
new_name = input("\nFULL NAME, SURNAME FIRST: ").upper()
new_sex = input("SEX: ").upper()
new_age = int(input("AGE: "))

p_inputs[new_name] = {'SEX': new_sex, 'AGE': new_age}
with open("info", "wb") as f:
    pickle.dump(p_inputs, f)

print("Added")
print()

search_age = int(input("Show people with this age: "))
search_result = {k: v for k, v in p_inputs.items() if v["AGE"] == search_age}
print(search_result)

输入/输出

Please enter the necessary information.

FULL NAME, SURNAME FIRST: DOE, JOHN
SEX: MALE
AGE: 18
Added

Show people with this age: 18
{'DOE, JANE': {'SEX': 'FEMALE', 'AGE': 18}, 'DOE, JOHN': {'SEX': 'MALE', 'AGE': 18}, 'WEST, MARIA': {'SEX': 'FEMALE', 'AGE'
: 18}}

【讨论】:

  • 这澄清了我的很多问题,谢谢。但是,如果我想打印具有相同 AGE 的字典,而不必像您那样将其放入语法中怎么办?
  • 我不确定你是想使用新人的年龄还是额外的问题。我已经编辑了我的问题并添加了一个如何动态/交互地使用它的示例。
  • 谢谢!我明白了,对混乱感到抱歉。这正是我想做的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-19
  • 1970-01-01
  • 1970-01-01
  • 2019-08-25
  • 1970-01-01
  • 2016-06-09
  • 1970-01-01
相关资源
最近更新 更多