在Python 3中,我有一个包含各种记录的元组列表,可以说它叫做alpha_data
。它们的布局如下:
[('A','Apple',14.5),('B','Banana',23.4)等。
用户是否可以输入类似于元组第一个值的值(例如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")
正如你所看到的,我正在使用一个名为shares的模块,其中包含一个名为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),
现在如何让它检查用户输入中的任何值并打印其中的任何值?
答案 0 :(得分: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"
等来访问这些条目,那么dict
似乎是更明智的解决方案:
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