Python:基于多字典中的值生成新名称

Python:基于多字典中的值生成新名称,python,python-3.x,loops,dictionary,for-loop,Python,Python 3.x,Loops,Dictionary,For Loop,对于python来说比较陌生,如果问题/脚本冗长且含糊不清,我们深表歉意。下面的脚本返回搜索的球队名称的键和值(例如:2,夏洛特黄蜂队);然而,我也希望它能返回它所在的联赛名称。例如“nfl”、“nba”、“mlb”;根据字典,它可以在(nba夏洛特黄蜂队2号)中找到。对此已经研究了一段时间,但找不到动态解决方案。提前谢谢你的帮助 NFL_Teams = {1: "Arizona Cardinals", 2: "Atlanta Falcons", 3: "Baltimore Ravens"} N

对于python来说比较陌生,如果问题/脚本冗长且含糊不清,我们深表歉意。下面的脚本返回搜索的球队名称的键和值(例如:2,夏洛特黄蜂队);然而,我也希望它能返回它所在的联赛名称。例如“nfl”、“nba”、“mlb”;根据字典,它可以在(nba夏洛特黄蜂队2号)中找到。对此已经研究了一段时间,但找不到动态解决方案。提前谢谢你的帮助

NFL_Teams = {1: "Arizona Cardinals", 2: "Atlanta Falcons", 3: "Baltimore Ravens"}
NBA_Teams = {1:'Washington Wizards', 2:'Charlotte Hornets', 3: 'Atlanta Hawks'}
MLB_Teams = {1: 'Los Angeles Dogers', 2: 'Cincinnati Reds', 3: 'Toronto Blue Jays'}    

def Standings(reply):
    def dictionary_search(name, dictionary):
        for key, value in dictionary.items():
            if value == name:
                return True # Boolean to show if team name is in merged dictionaries. 
            if key == name:
                pass # Used as a throw-away variable

    for single_dictionary in (NFL_Teams, NBA_Teams, MLB_Teams):
        if dictionary_search(reply, single_dictionary):
            for key, value in single_dictionary.items():
                if reply == value:
                    print(key, value)
            break
    else:
        print('Please Try Again')

Standings('Charlotte Hornets')

一旦您将dict分配给另一个名为“single_dictionary”的var,您实际上会丢失该名称。。所以我试着把联盟的名字和最初的球队名称联系起来

运行于:

teams = {'NFL': {1: "Arizona Cardinals", 2: "Atlanta Falcons", 3: "Baltimore Ravens"},
         'NBA': {1:'Washington Wizards', 2:'Charlotte Hornets', 3: 'Atlanta Hawks'},
         'MLB': {1: 'Los Angeles Dogers', 2: 'Cincinnati Reds', 3: 'Toronto Blue Jays'}}

# NFL_Teams = {1: "Arizona Cardinals", 2: "Atlanta Falcons", 3: "Baltimore Ravens"}
# NBA_Teams = {1:'Washington Wizards', 2:'Charlotte Hornets', 3: 'Atlanta Hawks'}
# MLB_Teams = {1: 'Los Angeles Dogers', 2: 'Cincinnati Reds', 3: 'Toronto Blue Jays'}

def standings(reply):
    for league, single_dictionary in teams.items():
        if reply in single_dictionary.values():
            for key, value in single_dictionary.items():
                if reply == value:
                    print(key, value)
                    print(league)
            break
    else:
        print('Please Try Again')

standings('Charlotte Hornets')
将打印:

2 Charlotte Hornets
NBA

一旦您将dict分配给另一个名为“single_dictionary”的var,您实际上会丢失该名称。。所以我试着把联盟的名字和最初的球队名称联系起来

运行于:

teams = {'NFL': {1: "Arizona Cardinals", 2: "Atlanta Falcons", 3: "Baltimore Ravens"},
         'NBA': {1:'Washington Wizards', 2:'Charlotte Hornets', 3: 'Atlanta Hawks'},
         'MLB': {1: 'Los Angeles Dogers', 2: 'Cincinnati Reds', 3: 'Toronto Blue Jays'}}

# NFL_Teams = {1: "Arizona Cardinals", 2: "Atlanta Falcons", 3: "Baltimore Ravens"}
# NBA_Teams = {1:'Washington Wizards', 2:'Charlotte Hornets', 3: 'Atlanta Hawks'}
# MLB_Teams = {1: 'Los Angeles Dogers', 2: 'Cincinnati Reds', 3: 'Toronto Blue Jays'}

def standings(reply):
    for league, single_dictionary in teams.items():
        if reply in single_dictionary.values():
            for key, value in single_dictionary.items():
                if reply == value:
                    print(key, value)
                    print(league)
            break
    else:
        print('Please Try Again')

standings('Charlotte Hornets')
将打印:

2 Charlotte Hornets
NBA

数字用作键重要吗? 从另一个角度把它们读入字典有意义吗然后可以使用
try-except-KeyError
语句。对于非常大的字典来说,这可能是更好的选择(尽管对于联赛中的球队来说,情况并非如此)。这也可能是一种更加面向对象的思维方式:团队名称是对象标识符,而(我假设数字是当前联盟位置?)联盟位置是一个属性(并且是可变的)。例如(改编Aaron_ab的答案)

或者,删除数字并拥有列表字典(其中列表顺序为当前联盟顺序):


数字用作键重要吗? 从另一个角度把它们读入字典有意义吗然后可以使用
try-except-KeyError
语句。对于非常大的字典来说,这可能是更好的选择(尽管对于联赛中的球队来说,情况并非如此)。这也可能是一种更加面向对象的思维方式:团队名称是对象标识符,而(我假设数字是当前联盟位置?)联盟位置是一个属性(并且是可变的)。例如(改编Aaron_ab的答案)

或者,删除数字并拥有列表字典(其中列表顺序为当前联盟顺序):


您基本上希望获得保存数据的变量的名称。你不可能做到这一点(好吧,不是没有一些奇怪的诡计),但是你可以制作一个字典,其中键是团队的名称,值-你的原始字典(顺便说一句,可以是简单的列表)。你基本上想要得到保存数据的变量的名称。你不可能做到这一点(好吧,不是没有一些奇怪的诡计),但是你可以制作一个字典,其中的键是团队的名称和值-你的原始字典(顺便说一句,可以是简单的列表)。真是太感谢你了!苦苦思索了整整一个小时。真是太感谢你了!在整整一个小时的时间里,我们都在努力思考。引发和捕获异常需要更多的计算能力,尽量避免。引发和捕获异常需要更多的计算能力,尽量避免