Python:如何过滤字典?

Python:如何过滤字典?,python,pandas,dictionary,Python,Pandas,Dictionary,我想实现以下目标,但使用字典 name_selected = "Jason" if name_selected == "John": age = 10 gender = "Male" elif name_selected == "Jason": age = 20 gender = "Male" print(age, gender) 由于您正在测试name\u

我想实现以下目标,但使用字典

name_selected = "Jason"

if name_selected == "John":
    age = 10
    gender = "Male"
elif name_selected == "Jason":
    age = 20
    gender = "Male"

print(age, gender)

由于您正在测试
name\u selected==…
,因此
name\u selected
的可能值就是您想要的字典。字典是一种结构,用于替换变量的elif查找

有鉴于此,您可以通过多种方式存储剩余的数据。下面是一个可以解包的元组:

data = {'John': (10, 'Male'),
        'Jason': (20, 'Male')}
那你就可以了

age, gender = data[name_selected]
您可以使用另一个嵌套字典来扩展此想法:

data = {'John': {
    'age': 10, 'gender': 'Male'},
        'Jason': {
    'age': 20, 'gender': 'Male'}
}
现在最好不要打开包装:

person = data[name_selected]
# use person ['age'] and person['gender']

一个更为特定于应用程序的解决方案是使值成为自定义对象(如
collections.namedtuple
),这将允许您以属性的形式访问个人的数据。

这是一个糟糕的数据组织。如果您将名称设置为字典键,则会更好:

data = {
    "John": { "age": 10, "gender": "Male"},
    "Jason": { "age": 20, "gender": "Male"}
}

age = data[name_selected]["age"]
gender = data[name_selected]["gender"]
但是,如果您仍在使用数据结构,可以使用
index()
获取
name
元素中的索引,然后使用该索引获取其他元素中的相应值

try:
    index = data['name'].index(name_selected)
    age = data['age'][index]
    gender = data['gender'][index]
except:
    print(f'{name_selected} not found')

谢谢你说出了这个糟糕的结构。我有一个关于坚持或改变它的问题。@thebadgateway我认为你的警告是没有必要的。原始的
if
代码也只支持名称的一个匹配项。这是等价的。
try:
    index = data['name'].index(name_selected)
    age = data['age'][index]
    gender = data['gender'][index]
except:
    print(f'{name_selected} not found')