Python 搜索列表并显示结果

Python 搜索列表并显示结果,python,list,tabular,Python,List,Tabular,我有一个列表,如下所示: [['De Aza, Alejandro', 'CWS', '153', '607', '84', '160', '27', '4', '17'], ['Hunter, Torii', 'DET', '144', '606', '90', '184', '37', '5', '17'], ['Hamilton, Josh', 'LAA', '151', '576', '73', '144', '32', '5', '21'], ['Choo, Shin-Soo',

我有一个列表,如下所示:

[['De Aza, Alejandro', 'CWS', '153', '607', '84', '160', '27', '4', '17'],
 ['Hunter, Torii', 'DET', '144', '606', '90', '184', '37', '5', '17'],
 ['Hamilton, Josh', 'LAA', '151', '576', '73', '144', '32', '5', '21'],
 ['Choo, Shin-Soo', 'CIN', '154', '569', '107', '162', '34', '2', '21'],
 ['Upton, Justin', 'ATL', '149', '558', '94', '147', '27', '2', '27'],
 ['Cabrera, Miguel', 'DET', '148', '555', '103', '193', '26', '1', '44'],
 ['Posey, Buster', 'SF', '148', '520', '61', '153', '34', '1', '15'],
 ['Suzuki, Ichiro', 'NYY', '150', '520', '57', '136', '15', '3', '7'],
 ['Holliday, Matt', 'STL', '141', '520', '103', '156', '31', '1', '22'],
 ['Headley, Chase', 'SD', '141', '520', '59', '130', '35', '2', '13'],
 ['Cabrera, Asdrubal', 'CLE', '136', '508', '66', '123', '35', '2', '14'],
 ['Pierzynski, A.J.', 'TEX', '134', '503', '48', '137', '24', '1', '17'],
 ['Hoes, L.J.', 'HOU', '46', '167', '24', '48', '7', '2', '1'],
 ['Young Jr., Eric', 'COL', '57', '165', '22', '40', '9', '3', '1'],
 ['Hairston, Scott', 'CHC', '52', '99', '13', '17', '2', '0', '8'],
 ['Arnaud, Travis', 'NYM', '31', '99', '4', '20', '3', '0', '1'],
 ['Ankiel, Rick', 'NYM', '20', '66', '7', '12', '4', '1', '2'],
 ['Ankiel, Rick', 'HOU', '25', '62', '6', '12', '3', '0', '5'],
 ['den Dekker, Matt', 'NYM', '27', '58', '7', '12', '1', '0', '1'],
 ['Sanchez, Angel', 'CWS', '1', '2', '0', '0', '0', '0', '0']]
我希望用户输入一个类似“TEAM DET”的命令,以及生成该TEAM元素的所有列表的列表,因此“TEAM DET”会产生如下结果:

Name          | Team | Games played | at bats | runs scored | hits | doubles | triples | homeruns |
Hunter, Torii | DET  | 144          | 606     | 90          | 184  | 37      | 5       | 17       | 
等等,与DET的所有成员


编辑:我使用的是python 3.3.3,而不是元组,使用字典列表

例如:

players = []
player = {'Player': 'Hunter, Torii', 'Team': 'DET', 'Games Played': '144', 'At Bats': '606', 'Runs Scored': '90', 'Hits': '184', 'Doubles': '37', 'Triples': '5', 'Homeruns': '17']
players.append(player)
#Put each player in that format and append to the list

input = input()

for player in players:
    if player['Team'] == input:
        print(player)
很明显,您将格式化打印语句,使其看起来符合您的要求。如果您有任何问题,请在下面提问。

用于简化查找。创建一个字典,其中团队名称是键,拥有该团队的所有条目都是值。因此,这些值将是一个列表。因此,
defaultdict(list)
是合适的

from collections import defaultdict
from pprint import pprint

data_dict = defaultdict(list)
for item in data:
    data_dict[item[1]].append(item)
pprint(data_dict['DET'])
这就是你得到的:

[['Hunter, Torii', 'DET', '144', '606', '90', '184', '37', '5', '17'],
 ['Cabrera, Miguel', 'DET', '148', '555', '103', '193', '26', '1', '44']]

然后,您可以使用
csv
模块对输出进行格式化,并按照需要的方式显示输出。希望能有所帮助。

以下是一个紧凑的示例程序,可满足您的要求:

l=[['De Aza, Alejandro', 'CWS', '153', '607', '84', '160', '27', '4', '17'],
 ['Hunter, Torii', 'DET', '144', '606', '90', '184', '37', '5', '17'],
 ['Hamilton, Josh', 'LAA', '151', '576', '73', '144', '32', '5', '21'],
 ['Choo, Shin-Soo', 'CIN', '154', '569', '107', '162', '34', '2', '21'],
 ['Upton, Justin', 'ATL', '149', '558', '94', '147', '27', '2', '27'],
 ['Cabrera, Miguel', 'DET', '148', '555', '103', '193', '26', '1', '44']]
header="|Name              | Team | Games played | at bats | runs scored | hits | doubles | triples | homeruns |"
formatstring="".join(["|%-"+str(columnwidth)+"s" for columnwidth in [len(i) for i in header.split("|")[1:-1]]])+"|"
command=raw_input("Enter a command!\n")
cmdparts=command.split()
if cmdparts[0]=="TEAM" and len(cmdparts)>=2:
  print header
  for team in cmdparts[1:]:
    for item in l:
      if  team in item[1]:
        print formatstring % tuple(item)
当它被调用时,它请求一个命令。如果键入TEAM DET LAA,它将在表格中列出来自TEAM DET和LAA的所有条目:

$ python test.py
Enter a command!
TEAM DET LAA
|Name              | Team | Games played | at bats | runs scored | hits | doubles | triples | homeruns |
|Hunter, Torii     |DET   |144           |606      |90           |184   |37       |5        |17        |
|Cabrera, Miguel   |DET   |148           |555      |103          |193   |26       |1        |44        |
|Hamilton, Josh    |LAA   |151           |576      |73           |144   |32       |5        |21        |

你的意思是列表列表?它告诉我dict没有属性“append”,你必须使用文件中的元素到这个dict中,所以你不能自己编辑这些值。这很好,也可以使用另一个答案bro:)如果我使用Python2.x,我相信这会起作用:(对于Python3.x,您只需要稍微更改4行:
formatstring=“”.join([“{str(columnwidth)+“s}”表示标题中的列宽[len(I)表示标题中的I.split(“|”)表示“[1:-1]]))+“|”
;以及
print(标题)
;和
print(formatstring.format(*tuple(item))
;和
command=input(“输入命令!\n”)