繁体   English   中英

打印由用户输入生成的词典的内容

[英]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 OrderedDictclass如上所述或定义打印功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM