从Python

时间:2017-11-03 13:04:05

标签: python dictionary

File1.py

john = {'fullname':'John Wick', 'Age': 35 , 'job':'Hitman'}
mark = {'fullname':'Mark Zuckerberg', 'Age': 30, 'job': 'Developer'}
Will = {'fullname':'Will smith', 'Age': 45, 'job': 'Actor'}
so on... and many more names

所以我的问题是我如何获取这些价值观,让我说我想通过给出这个人的名字来了解一个人的年龄?

File2.py

from File1.py import *
#what should the code be to access the age 
#lets say I write 'john', I want to get his age

print john['Age'] # this is not how i want to access it

#
#any other way or methods ??
#
user_input=raw_input("enter a Name: ")
# user_input contains the name of the person I want to get the Age of

6 个答案:

答案 0 :(得分:1)

您可以使用嵌套字典将此人的姓名传递给字典,然后通过密钥访问年龄"年龄":

fetchallarrow

输出:

john = {'fullname':'John Wick', 'Age': 35 , 'job':'Hitman'}
mark = {'fullname':'Mark Zuckerberg', 'Age': 30, 'job': 'Developer'}
Will = {'fullname':'Will smith', 'Age': 45, 'job': 'Actor'}
new_data = {"John":john, "Mark":mark, "Will":Will}
print(new_data["John"]["Age"])

编辑:没有嵌套字典,您可以尝试:

35

输出:

john = {'fullname':'John Wick', 'Age': 35 , 'job':'Hitman'}
mark = {'fullname':'Mark Zuckerberg', 'Age': 30, 'job': 'Developer'}
Will = {'fullname':'Will smith', 'Age': 45, 'job': 'Actor'}
user_input=raw_input("enter a Name: ")
final_age = [b["Age"] for a, b in globals().items() if a == user_input][0]

答案 1 :(得分:1)

首先,在我看来,你不应该这样做。 @ Ajax1234提供了一个更好的解决方案,但问你的问题:

import File1

name = input('>>> Name: ')
print(getattr(File1, name)['Age'])  # 35

是吗

答案 2 :(得分:0)

您可以在词典中使用get函数

print(john.get('age' , 0))

首先获取两个参数的密钥,然后在未找到密钥时加载默认值

答案 3 :(得分:0)

在嵌套字典旁边,您还可以使用导入别名来使代码更清晰。

var doc = new jspdf('p','pt','a4');
doc.autoTable(columns, rows, { headerStyles: { lineWidth: 0.06, lineColor: [217, 216, 216] }, beforePageContent: header, margin: {top: 40}, theme: 'plain', styles: { overflow: 'linebreak', lineWidth: 0.02, lineColor: [217, 216, 216] } }); var header = function (data) { doc.setFontSize(25); doc.setTextColor(0); doc.text(this.companyname,15,15); doc.setFontStyle('normal'); }; doc.autoTableHtmlToJson(columns, rows); doc.save("file.pdf");

答案 4 :(得分:0)

您可以使用内置的globals功能。从文档(强调我的):

  

返回表示当前全局符号表的字典。这始终是当前模块的字典(在函数或方法内部,这是定义它的模块,不是调用它的模块)。

修改

当您使用单独的文件时,您可以在文件File1.py中创建一个函数,该函数接受字典名称并使用globals()函数返回适当的值。

用法:

File1.py
john = {'fullname':'John Wick', 'Age': 35 , 'job':'Hitman'}
mark = {'fullname':'Mark Zuckerberg', 'Age': 30, 'job': 'Developer'}
Will = {'fullname':'Will smith', 'Age': 45, 'job': 'Actor'}

def get_age(person):
    return globals()[person]['Age']
File2.py
import File1

person = input('Enter name:')
print(File1.get_age(person))

答案 5 :(得分:0)

我不完全理解为什么要将这些dicts中的每一个保存到一个单独的变量中,而不是仅使用嵌套的dict,如

persons = {
    'john': {'fullname': 'John Wick', 'Age': 35, 'job': 'Hitman'},
    'mark': {'fullname': 'Mark Zuckerberg', 'Age': 30, 'job': 'Developer'},
    'will': {'fullname': 'Will Smith', 'Age': 45, 'job': 'Actor'}
}

您可以使用用户输入来访问persons dict的密钥, 如果你真的想根据他们的命名你的变量(这对我来说没有多大意义,因为它之后并没有真正的变量),你可以使用Python的{{1 }和globals()函数。

file1.py

locals()

file2.py

john = {'fullname': 'John Wick', 'Age': 35, 'job': 'Hitman'}
mark = {'fullname': 'Mark Zuckerberg', 'Age': 30, 'job': 'Developer'},
will = {'fullname': 'Will Smith', 'Age': 45, 'job': 'Actor'}

但是,由于你可以使用嵌套的dict,我认为没有任何一个合理的理由可以使用from file1 import * name = raw_input('Please enter a name:') global_vars = globals() print(global_vars[name]) 来完成这个用例。只需在另一个字典中的键下声明你的字谜,你应该没问题。