【问题标题】:Combining a element in a tuple to another tuple将元组中的元素组合到另一个元组
【发布时间】:2023-01-18 16:30:56
【问题描述】:
player_stat =[
    ('Harry Kane', '34', '19'),
    ('Player E', '35', '20'),
    ('Lionel Messi', '34', '14'),
    ('Player F', '35', '11'),
    ('Player A', '35', '17'),
    ('Player B', '35', '15'),
    ('Kylian Mbappe', '35', '18'),
    ('Player C', '35', '18'),
    ('Erling Haaland','35','21'),
    ('Player D', '35', '19'),
]

market_value = [
    ('Erling Haaland','138M'),
    ('Harry Kane', '120M'),
    ('Lionel Messi', '118.7M'),
    ('Kylian Mbappe', '115M'),
    ('Player A', '107M'),
    ('Player B', '108M'),
    ('Player E', '100M'),
    ('Player F', '98M'),
]

我想循环遍历这些元组,基本上如果名称相等,我想将市场价值添加到玩家统计数据中。 (选手C、D无数据)

我试过了:

for i in range(len(player_stat)):
    for j in range(len(market_value)):
        if(player_stat[i][0]==market_value[j][0]):
            player_stat[i] = player_stat[i] + (str(market_value[j][1]),)
            break
        else:
            player_stat[i] = player_stat[i] + ('undef',)

希望最终结果是:

player_stat =[
    ('Harry Kane', '34', '19', '120M'),
    ('Player E', '35', '20', '100M'),
    ('Lionel Messi', '34', '14', '118.7M'),
    ('Player F', '35', '11', '98M'),
    ('Player A', '35', '17', '107M'),
    ('Player B', '35', '15', '108M'),
    ('Kylian Mbappe', '35', '18', '115M'),
    ('Player C', '35', '18', 'unknown'),
    ('Erling Haaland','35','21', '138M'),
    ('Player D', '35', '19', 'unknown),
]

【问题讨论】:

  • 您好,您遇到问题是因为您使用了错误的数据结构。两个变量都需要是字典,而不是元组列表。

标签: python list tuples


【解决方案1】:

至少应将market_value 转换为字典。

player_stat =[
    ('Harry Kane', '34', '19'),
    ('Player E', '35', '20'),
    ('Lionel Messi', '34', '14'),
    ('Player F', '35', '11'),
    ('Player A', '35', '17'),
    ('Player B', '35', '15'),
    ('Kylian Mbappe', '35', '18'),
    ('Player C', '35', '18'),
    ('Erling Haaland','35','21'),
    ('Player D', '35', '19'),
]

market_value = [
    ('Erling Haaland','138M'),
    ('Harry Kane', '120M'),
    ('Lionel Messi', '118.7M'),
    ('Kylian Mbappe', '115M'),
    ('Player A', '107M'),
    ('Player B', '108M'),
    ('Player E', '100M'),
    ('Player F', '98M'),
]

market_value = dict(market_value)
print(market_value)

这会给你

{'Erling Haaland': '138M',
 'Harry Kane': '120M',
 'Kylian Mbappe': '115M',
 'Lionel Messi': '118.7M',
 'Player A': '107M',
 'Player B': '108M',
 'Player E': '100M',
 'Player F': '98M'}

现在它是一个带有查找的简单列表理解。

players = [player + (market_value.get(player[0], 'unknown'),) for player in player_stat]

结果是

[('Harry Kane', '34', '19', '120M'),
 ('Player E', '35', '20', '100M'),
 [...]
 ('Erling Haaland', '35', '21', '138M'),
 ('Player D', '35', '19', 'unknown')]

【讨论】:

    【解决方案2】:

    使用市场价值作为查找字典:

    market_dict = dict(market_value)
    player_stat = [p + (market_dict.get(p[0],'unknown'),) for p in player_stat]
    print(player_stat)
    

    [('Harry Kane', '34', '19', '120M'),
     ('Player E', '35', '20', '100M'),
     ('Lionel Messi', '34', '14', '118.7M'),
     ('Player F', '35', '11', '98M'),
     ('Player A', '35', '17', '107M'),
     ('Player B', '35', '15', '108M'),
     ('Kylian Mbappe', '35', '18', '115M'),
     ('Player C', '35', '18', 'unknown'),
     ('Erling Haaland', '35', '21', '138M'),
     ('Player D', '35', '19', 'unknown')]
    

    【讨论】:

      【解决方案3】:

      您可以将第二个集合转换为字典并使用它来填充结果:

      mv_dict = dict(market_value)
      result = [(x, y, z, mv_dict.get(x, "unknown")) for x, y, z in player_stat]
      

      如果你愿意使用外部库(pandas),这可以很容易地完成:

      players = pd.DataFrame(player_stat, columns=['name', 'games', 'goals'])
      mv = pd.DataFrame(market_value, columns=['name', 'value'])
      players.merge(mv, how='left').fillna("unknown")
      

      【讨论】:

        【解决方案4】:

        使用问题中所示的数据结构,您可以这样做:

        # convert market_value list to a dictionary for simplified lookup
        mvd = {t[0]: t[1] for t in market_value}
        
        # enumerate player_stat and recreate each tuple with an appropriate 'value' appended to each tuple
        for i, t in enumerate(player_stat):
            player_stat[i] = t + (mvd.get(t[0], 'unknown'),)
        
        print(player_stat)
        

        输出:

        [('Harry Kane', '34', '19', '120M'), ('Player E', '35', '20', '100M'), ('Lionel Messi', '34', '14', '118.7M'), ('Player F', '35', '11', '98M'), ('Player A', '35', '17', '107M'), ('Player B', '35', '15', '108M'), ('Kylian Mbappe', '35', '18', '115M'), ('Player C', '35', '18', 'unknown'), ('Erling Haaland', '35', '21', '138M'), ('Player D', '35', '19', 'unknown')]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-07-06
          • 1970-01-01
          • 1970-01-01
          • 2021-08-02
          • 2020-04-09
          • 2016-12-19
          相关资源
          最近更新 更多