【问题标题】:How to get the value of a value as a key of a dictionary如何获取值的值作为字典的键
【发布时间】:2013-07-12 14:00:16
【问题描述】:

我不确定以前是否有人问过这个问题,因为我也不知道如何措辞:

例如,我有一个包含键和值的给定字典:

d = {[ 0 : 1, 2, 3], [1 : 2, 3, 4], [2: 5, 6, 7]}

我想证明 1 是一个键,也是一个值,从而得出以下结论: 0 连接到 1 的值。例如 [0:[2,3,4], 2, 3] 或类似的东西。

我会为大量键执行此操作,每个键都有多个值。

这可能吗?我将如何编码?顺便说一句,我对 Python 很陌生,所以请放轻松。

【问题讨论】:

    标签: python dictionary key


    【解决方案1】:

    你的意思是这样的吗?

    d = { 0 : (1, 2, 3) , 1 : (2, 3, 4), 2: (5, 6, 7)}
    for key in d.keys():
        for val in d[key]:
            try:
                d[key]+=d[val]
            except KeyError:
                pass
    

    给了

    >>> d
    {0: (1, 2, 3, 2, 3, 4, 5, 6, 7), 1: (2, 3, 4, 5, 6, 7), 2: (5, 6, 7)}
    

    如果您想要唯一值,请将 d[key] = tuple(set(d[key])) 添加到 for key in d.keys() 循环的末尾。

    给予

    >>> d
    {0: (1, 2, 3, 4, 5, 6, 7), 1: (2, 3, 4, 5, 6, 7), 2: (5, 6, 7)}
    

    ps:d = {[ 0 : 1, 2, 3], [1 : 2, 3, 4], [2: 5, 6, 7]} 不是有效的 python!

    编辑:见 cmets。

    d = { 0 : [1, 2, 3] , 1 : [2, 3, 4], 2: [5, 6, 7]}
    for key in d.keys():
        orig_vals=d[key]
        new_vals=[]
        for val in orig_vals:
            try:
                new_vals+=d[val]
            except KeyError:
                pass
        d[key] = list(set(new_vals)-set(orig_vals))
    

    给予

    >>> d
    {0: [4, 5, 6, 7], 1: [5, 6, 7], 2: []}
    

    如果您想避免清除未链接到其他键的值,例如2中的[5,6,7],然后把最后一行改成

    if new_vals:
            d[key] = list(set(new_vals)-set(orig_vals))
    

    这给了

    >>> d
    {0: [4, 5, 6, 7], 1: [5, 6, 7], 2: [5, 6, 7]}
    

    编辑 2:见 cmets。

    d = { 0 : [1, 2, 3] , 1 : [2, 3, 4], 2: [5, 6, 7]}
    for key in d.keys():
        orig_vals=d[key]
        new_vals=[]
        count = 0
        for val in orig_vals:
            try:
                new_vals+=d[val]
                count+=1
                if count >= yournumberhere: break
            except KeyError:
                pass
        d[key] = list(set(new_vals)-set(orig_vals))
    

    【讨论】:

    • 哦,是的,谢谢!这绝对是我想做的事情!是的,我刚刚意识到我在字典上的错误,也感谢您指出这一点。是否也可以更改键的值,使其仅是值的值? (这个术语很混乱哈哈)
    • 我不明白,值的值是什么意思?每个值有多个键?
    • 哦,你的意思是把d[key]的赋值改成d[val]的赋值?例如0:(1,2,3) 会转到 0:(2,3,4,5,6,7) ,或者可能转到 0:[(2,3,4),(5,6,7)]
    • errr,我认为它会改变分配?所以 0:(1,2,3) 会变成 0:(4,5,6,7)。我也想删除与原始分配相同的任何值。
    • 我明白了,元组是不可变的,所以我们必须使用列表。我将编辑我的答案。
    【解决方案2】:
    d = {[ 0 : 1, 2, 3], [1 : 2, 3, 4], [2: 5, 6, 7]} this is not a valis dictionary
    
    It will be like this:
    
    d={0: [1, 2, 3], 1: [2, 3, 4], 2: [5, 6, 7]}
    arr=[]
    for val in d.values():
           arr.extend(val)
    
    
    
    arr = [1, 2, 3, 2, 3, 4, 5, 6, 7]
    
    values=set(arr) #removeing repeted element from the list
    value = [1, 2, 3, 4, 5, 6, 7]
    
    result = [key for key in d.keys() if key in values] #will return the result
    result = [1, 2]
    
    here result = [1,2] so,1 and 2 is a key and also a vaule
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-27
      相关资源
      最近更新 更多