0

在 Python 3 中,我有一个包含各种记录的元组列表,假设它被称为alpha_data. 它们的布局如下:[('A', 'Apple', 14.5), ('B', 'Banana', 23.4), etc.]

有没有一种方法可以让用户输入类似于元组的第一个值(例如 A 或 B)的值,并且程序将检查该值是否存在,如果存在则打印回整个嵌套值?例子:

Input: A

Output: A Apple 14.5

还有一种方法可以修改它,以便用户可以输入多个值并检查并打印它们吗?例如:

Input: A, B

Output:

    A Apple 14.5
    B Banana 23.4

编辑:也许我需要更清楚一点。我有代码可以获取输入并将其转换为多个条目的列表。然后我得到了一条线,它按照我需要的方式打印元组的 3 个值。我所需要的只是将这两个部分连接在一起。

到目前为止,这是我的代码:

import shares
portfolio_str=input("Please list portfolio: ")
portfolio_str= portfolio_str.replace(' ','')
portfolio_str= portfolio_str.upper()
portfolio_list= portfolio_str.split(',')
print(portfolio_list)
print()
print('{:<6} {:<20} {:>8}'.format('Code', 'Name', 'Price'))
data=shares.EXCHANGE_DATA
for  (code, name, share_value) in data:
    if code == portfolio_list[]:
            print('{:<6} {:<20} {:>8.2f}'.format(code, name, share_value))
    else:
            print("Failure")

如您所见,我正在使用一个名为 share 的模块,其中包含一个名为 EXCHANGE_DATA 的元组列表,其设置如下:

 EXCHANGE_DATA = [('AIA', 'Auckair', 1.50),
             ('AIR', 'Airnz', 5.60),
             ('AMP', 'Amp',3.22), 
             ('ANZ', 'Anzbankgrp', 26.25),
             ('ARG', 'Argosy', 12.22),
             ('CEN', 'Contact', 11.22),
             ('CNU', 'Chorus',3.01),
             ('DIL', 'Diligent', 5.3),
             ('DNZ', 'Dnz Property', 2.33),
             ('EBO', 'Ebos', 1.1),

现在我如何让它检查用户输入中的任何值并打印它们中的任何一个?

4

1 回答 1

4

给定一些输入"A""B"非常简单的获取记录:

alpha_data = [('A', 'Apple', 14.5), ('B', 'Banana', 23.4)]

user_input = "A"

[rec for rec in alpha_data if rec[0] == user_input]
Out[4]: [('A', 'Apple', 14.5)]

但是,如果您的目标是允许用户使用 等访问这些条目"A""B"那么 adict似乎是更明智的解决方案:

alpha_dict = {"A": ("Apple", 14.5), "B": ("Banana", 23.4)}

user_input = "A"

alpha_dict[user_input]
Out[8]: ('Apple', 14.5)

将这些想法应用于您的实际用例非常简单,在您尝试迭代数据并尝试在portfolio_list键中查找匹配项时,但更容易迭代portfolio_list并在数据中查找匹配项:

EXCHANGE_DATA = [('AIA', 'Auckair', 1.50),
            ('AIR', 'Airnz', 5.60),
            ('AMP', 'Amp',3.22), 
            ('ANZ', 'Anzbankgrp', 26.25),
            ('ARG', 'Argosy', 12.22),
            ('CEN', 'Contact', 11.22),
            ('CNU', 'Chorus',3.01),
            ('DIL', 'Diligent', 5.3),
            ('DNZ', 'Dnz Property', 2.33),
            ('EBO', 'Ebos', 1.1)]

portfolio_str=input("Please list portfolio: ")
portfolio_str= portfolio_str.replace(' ','')
portfolio_str= portfolio_str.upper()
portfolio_list= portfolio_str.split(',')

输入一些用户输入:

Please list portfolio: AIA, ARG

打印代码:

print('{:<6} {:<20} {:>8}'.format('Code', 'Name', 'Price'))
Code   Name                    Price

for code in portfolio_list:
    # This assumes there will only be one record per code
    rec = [rec for rec in EXCHANGE_DATA if rec[0] == code][0]
    # The *rec part is using a neat python feature called
    # tuple unpacking, google it if you're not familiar with it
    print('{:<6} {:<20} {:>8.2f}'.format(*rec))

输出:

AIA    Auckair                  1.50
ARG    Argosy                  12.22
于 2013-03-26T21:56:25.637 回答