[英]Printing the contents of a dictionary generated by user input
在大约一年前开始然后停止之后再次回到python。 我只是搞砸了字典,并通过用户输入和在函数中动态构建它们。
下面的代码有效,但是将其输出为通用词典格式,我想做的是逐行输出,每个键和值都在一行上。
def person_info(name, age, address, employer, phone):
name = name.strip()
age = age.strip()
address = address.strip()
employer = employer.strip()
phone = phone.strip()
full_info = {'Name:': name, 'Age': age, 'Address': address, 'Employer': employer, 'Phone': phone}
return full_info
while True:
name = input('Enter Name: ')
age = input('Enter Age: ')
address = input('Enter Address: ')
employer = input('Enter Employer: ')
phone = input('Enter Phone Number: ')
if name == 'q' or age == 'q' or address == 'q' or employer == 'q' or phone == 'q':
print("...quitting")
break
else:
person = person_info(name, age, address, employer, phone)
print(person)
break
这样我得到的输出为:
{'Name:': 'Tim', 'Age': '42', 'Address': '1111 Place Drive', 'Employer': 'Earth', 'Phone': '555'}
我想在哪里
姓名:蒂姆
年龄:42
等等...
我知道,如果我有静态定义的字典,我可以使用类似
for key, value in full_info.items():
print(key, value)
它会给我想要的输出,但是用我尝试的方法似乎不起作用。 我不确定这是否与函数中定义的字典有关。
我敢肯定有一个超级简单的答案,但是到目前为止我还找不到。
谢谢!
遍历字典中的项目似乎可行,尝试一下并告诉我它是否可以解决您的问题
def person_info(name, age, address, employer, phone):
name = name.strip()
age = age.strip()
address = address.strip()
employer = employer.strip()
phone = phone.strip()
full_info = {'Name:': name, 'Age:': age, 'Address:': address, 'Employer:': employer, 'Phone:': phone}
return full_info
while True:
name = input('Enter Name: ')
age = input('Enter Age: ')
address = input('Enter Address: ')
employer = input('Enter Employer: ')
phone = input('Enter Phone Number: ')
if name == 'q' or age == 'q' or address == 'q' or employer == 'q' or phone == 'q':
print("...quitting")
break
else:
person = person_info(name, age, address, employer, phone)
for key, value in person.items():
print(key, value)
break
输出似乎是您要使用的格式
让我们看看那些令人困惑的印刷品是从哪里来的。 首先,我将接受您的代码,取消您的print(person)
行。 查看仅input()
函数的作用:
def person_info(name, age, address, employer, phone):
name = name.strip()
age = age.strip()
address = address.strip()
employer = employer.strip()
phone = phone.strip()
full_info = {'Name:': name, 'Age': age, 'Address': address, 'Employer': employer, 'Phone': phone}
return full_info
while True:
name = input('Enter Name: ')
age = input('Enter Age: ')
address = input('Enter Address: ')
employer = input('Enter Employer: ')
phone = input('Enter Phone Number: ')
if name == 'q' or age == 'q' or address == 'q' or employer == 'q' or phone == 'q':
print("...quitting")
break
else:
person = person_info(name, age, address, employer, phone)
# print(person) NOTICE: This is commented out for now.
break
这是此版本的输出:
Enter Name: a
Enter Age: b
Enter Address: c
Enter Employer: d
Enter Phone Number: e
它只是通过打印到我的屏幕上问我要输入什么名称/年龄/地址/雇主/电话。 当我键入a / b / c / d / e时,这些字符也会显示在屏幕上,因为我键入了它们。 此版本完全不再打印。
现在让我们取消对print(person)
行的注释。 现在, 除了我们刚才看到的以外 ,还必须打印此person
。 因此,取消注释,然后按原样运行代码,您将获得以下信息:
Enter Name: a
Enter Age: b
Enter Address: c
Enter Employer: d
Enter Phone Number: e
{'Name:': 'a', 'Age': 'b', 'Address': 'c', 'Employer': 'd', 'Phone': 'e'}
注意,唯一的补充是字典。 第一行“输入内容”行与之前的行完全相同,完全是由于您询问了这些input
s所致。 而已。 它不会再打印任何东西,也不会输出任何意外内容。
无法隐藏那些Enter Name: a / Enter Age: b
打印内容。 但是,您可以编辑最后一个字典。 为此,您只需要将print(person)
修改为:
for key, value in person.items(): print(key, value)
现在输出变为:
Enter Name: a
Enter Age: b
Enter Address: c
Enter Employer: d
Enter Phone Number: e
Name: a
Age b
Address c
Employer d
Phone e
同样, Enter Name: a / Enter Age: b etc
的前5张照片,然后重新格式化的person
词典。 再说一次,什么也没印刷,没有什么意外的。
希望这可以澄清一切。
person_info
函数返回一个字典。 调用print时,它将仅打印您所用的字典,因为这是您可以通过调用full_info.__str__()
看到的字典的默认表示形式。 您可以通过定义一个负责打印的附加功能来进行替代显示。 或者,将person_info包装到一个类中,然后可以使用print(person)
,如下所示:
它不是更多的代码,但是它具有更多的优势,它可以确保打印输出的顺序,并且使使用更加简单,而无需在各处使用for循环。
无论如何,其他人已经回答了您如何执行此操作,但是这里有更多详细信息。 您可以使用函数的输出作为对象在for循环中进行迭代,如下所示:
函数返回一个字典,您可以对其应用items方法以对其进行迭代。 由于您远离Python,请注意,您可以使用拆包*
将dict的值作为参数传递给函数。
请注意,dict不保证顺序。 因此输出可能无法预测,如下所示:
如果要保证输出然后使用OrderedDict
from collections import OrderedDict
或class
如上所述或定义打印功能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.