【问题标题】:How do you turn a tuple with three elements into a dictionary containing a key and two values?如何将包含三个元素的元组转换为包含一个键和两个值的字典?
【发布时间】:2021-06-06 09:31:11
【问题描述】:

我有一个如下所示的元组:

List=[
    ('actinium-225', '10', '314'), 
    ('actinium-226', '1.2238', '110'), 
    ('americium-240', '2.117', '395'), 
    ('berkelium-245', '4.94', '182'),
]

不管怎样,这个列表还在继续,所以我一直在寻找如何解压这些以创建一个字典,以便我可以计算这些元素的放射性衰变率,因为第一个值是元素,第二个是半衰期和剩余库存量的三分之一(以克为单位)。

我需要这样的东西

Dict={
    1: ('actinium 225', 10, 314), 
    2: ('actinium-226', 1.2238, 110), 
    3: ('americium-240', 2.117, 395),
    4: ('berkelium-245', 4.94, 182),
}

【问题讨论】:

  • 如果您的密钥只是int 数字,为什么还要dict?继续使用list。
  • 是的......好吧,这个在 CHEM 中交给我们的任务要求我们在 python 中编写和测试元素放射性衰变公式,我认为 dict 可能是最好的方法......顺便说一句,没有我们中的一些人有 Py 的经验

标签: python list dictionary tuples


【解决方案1】:
dic = {}
for index, ele in enumerate(List):
    key = index+1
    val_2 = float(ele[1])
    val_3 = int(ele[2])
    dic.update({key: (ele[0], val_2, val_3)})
    
print(dic)

{1: ('actinium-225', 10.0, 314), 2: ('actinium-226', 1.2238, 110), 3: ('americium-240', 2.117, 395), 4: ('berkelium-245', 4.94, 182)}

【讨论】:

  • 我正在使用 Python 3.8.6 并且它没有运行。你的是什么版本的?
【解决方案2】:

如何将包含三个元素的元组变成字典 包含一个键和两个值?

您的问题标题与您的预期输出不匹配,因此我将仅使用预期输出而不是问题标题。

您可以将map 和enumerate 与字典理解一起使用:

{idx: tuple([item[0]] + list(map(float, item[1:]))) for idx, item in enumerate(List, 1)}

输出:

{1: ('actinium-225', 10.0, 314.0),
 2: ('actinium-226', 1.2238, 110.0),
 3: ('americium-240', 2.117, 395.0),
 4: ('berkelium-245', 4.94, 182.0)}

如果不需要类型转换,你可以这样做 dict(enumerate(List,1))

【讨论】:

  • @dontaccept ,最初我想用 dict comprehension {i:v for i, v in enumerate(item, 1)} 发布答案(不需要地图)。但是dict(enumerate(item,1)) 要短得多
  • 虽然@Georgiy,我通常更喜欢理解
  • 不错的答案,但 map 在那里是不必要的。你可以做一个nested unpack,看我的回答。
【解决方案3】:

您的问题的答案是微不足道的,您可以使用诸如理解、生成表达式、映射/过滤器等工具随意转换您的迭代。

这是一种代码高尔夫:

Dict = {i: (el, float(hl), int(st)) for i, (el, hl, st) in enumerate(List, 1)}

但是,

老实说,我不明白这一点。如果你认为你需要一个字典,它的键只是按int 数字排序,你不需要dict,你需要一个list!

您已经将它们放在list 中。您可以通过索引检索值,例如List[2],这与从dict(例如Dict[2])检索它们非常相似(甚至更好)。

【讨论】:

    【解决方案4】:

    你可以像这样循环遍历元组并创建一个字典

    elements = [('actinium-225', '10', '314'), ('actinium-226', '1.2238', '110'), ('americium-240', '2.117', '395'), ('berkelium-245', '4.94', '182')]
    elemDict = {}
    for ind, tup in enumerate(elements):
        elemDict[ind+1] = tup
    

    【讨论】:

    • 谢谢,但我使用的是 Python 3.8.6 并且它没有运行。你的是什么版本的?
    • @BuzzKotta 这应该在 python 3.8 中工作,你得到一个错误吗?
    【解决方案5】:

    简单的for-loop 与enumerate 和data destruction:

    l = [
        ('actinium-225', '10', '314'), 
        ('actinium-226', '1.2238', '110'), 
        ('americium-240', '2.117', '395'), 
        ('berkelium-245', '4.94', '182'),
    ]
    d = {}
    for i, (a, b, c) in enumerate(l, 1):
        d[i] = (a, float(b), int(c))
    
    print(d)
    '''
    {1: ('actinium-225', 10.0, 314), 
     2: ('actinium-226', 1.2238, 110),
     3: ('americium-240', 2.117, 395),
     4: ('berkelium-245', 4.94, 182)}
    '''
    

    【讨论】:

      猜你喜欢
      • 2019-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-02
      • 2014-07-24
      • 2021-05-28
      相关资源
      最近更新 更多