【问题标题】:Is there a way to combine two keys to make one? python有没有办法将两个键组合成一个? Python
【发布时间】:2019-06-09 19:45:10
【问题描述】:

我有密钥 NameIdMajor。有没有办法让NameId 的值成为键,而Major 是字典中的值?

Name     Id       Major
Joe      001      Math
Kyle     002      Coms
Lisa     003      Engr
Mia      004      Art
Nick     005      Engr
Olga     006      Math

{'Joe 001': Math, 'Kyle 002': Coms, 'Lisa 003': Engr, etc.}

我正在尝试从 excel 文件中执行此操作,因此我不想手动输入我正在练习的所有名称。有没有办法组合键?

您能帮我或将我链接到可能有帮助的东西吗?

【问题讨论】:

  • 键必须是不可变的;创建元组键来保存这两个值。你总是可以像你一样连接字符串,但这会删除两个值之间的明确分隔符(空格分隔不是万无一失的)
  • 这个问题似乎已经包含一个建议:将两个字符串连接成一个字符串并将其用作键,可能在键中使用一些额外的字符作为内部分隔符。例如。 Joe001 --> Joe 001.
  • 对不起,如果这是一个愚蠢的问题,但我可以通过引用列标签名称来做到这一点吗?以免手动操作
  • 我们假设这是一个熊猫数据框?您还没有添加标签。在我的脑海中,您可以迭代 DF.values 中的行并以这种方式构建您的字典以创建元组键。我不知道这是否可以使用 to_dict() 完成,但我不确定在这种情况下使用 iterrows 是否会加快速度。

标签: python pandas dictionary key


【解决方案1】:

您可以通过列表理解来制作所需的列表:

d2=[
{'Name': 'Joe', 'Id': '001',  'Major': 'Math'},
{'Name': 'Kyle', 'Id': '002',  'Major': 'Coms'}
]
d3={x['Name']+" "+x['Id'] : x['Major'] for x in d2}

print (d3)

#{'Joe 001': 'Math', 'Kyle 002': 'Coms'}

【讨论】:

    【解决方案2】:

    正如用户 roganjosh 所说,最好的方法是创建元组键。

    这是通过循环遍历您的行并使用此添加到字典来完成的。

    my_dict = {}
    for row in rows:
        my_dict[(row.Name, row.Id)] = row.Major
    

    不要只是将它们作为字符串附加。由于 Name 和 Id 彼此唯一,因此不能保证它们的串联也是唯一的。前任。 Name:joe0 Id:01 和 Name:joe Id:001 连接时相同。将它们保存为元组以确保安全。

    【讨论】:

      【解决方案3】:

      假设数据在 pandas.Dataframe 中,您可以更改数据并使用pandas.DataFrame.to_dict。例如:

      df['Key']=df['Name']+df['Id'] #combine the two columns you want to make keys
      df=df.drop(['Name','Id'],axis=1).set_index('Key').T.to_dict('list')
      

      合并两列后,我将 Key 设置为索引,然后转置。这将摆脱索引中的列名。然后我把它转换成字典。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-31
        • 1970-01-01
        • 2016-08-07
        • 1970-01-01
        • 1970-01-01
        • 2019-06-17
        相关资源
        最近更新 更多