【问题标题】:Can I Scramble a Dictonary in Python [closed]我可以在 Python 中打乱字典吗[关闭]
【发布时间】:2016-04-17 21:02:35
【问题描述】:

我有一本像这样的字典:

a = {1 : True, 2 : False, 3 : True, 4 : False, etc}

我怎样才能打乱这些值来得到这样的东西?

a = {1 : True, 2 : True, 3 : False, 4 : False, etc}

【问题讨论】:

  • 到目前为止您尝试了哪些方法,结果如何,为什么不满意?出了什么问题?
  • 那么到底打乱了什么?交换键和值?随机翻转布尔值? “加扰”没有标准定义,您需要提供一个。
  • 对不起,我的意思是随机分配一个键到一个值

标签: python dictionary


【解决方案1】:

我不知道是否有更简洁的方法,但字典值上的random.shuffle 应该可以完成工作。

from random import shuffle

a = {1 : True, 2 : False, 3 : True, 4 : False}

values = list(a.values())
shuffle(values)

shuffled = dict(zip(a, values))
# {1: True, 2: False, 3: False, 4: True}

【讨论】:

    【解决方案2】:

    如果“加扰”是指随机重新排列键值对,您可以像这样在一行中完成:

    from random import sample
    
    a = dict(zip(a, sample(a.values(), len(a))))
    

    但是,这不如使用 shuffle 高效。

    另外,请注意,在 Python 3 中,dict.values 返回的 dict_values object 与您预期的不同。因此,您需要编写以下内容:

    a = dict(zip(a, sample(list(a.values()), len(a))))
    

    【讨论】:

    • 不错,random.sample很好用。
    • @zondo 谢谢,好收获!
    • 当然,但是如果 OP 希望布尔值随机翻转怎么办?这个问题没有定义他们所说的“加扰”是什么意思。
    • @MartijnPieters 真;我已经澄清了我的答案。
    【解决方案3】:
    import random
    
    randValues = a.values()
    random.shuffle(randValues)
    
    for k in a:
        a[k] = randValues.pop()
    

    【讨论】:

      【解决方案4】:

      也许你想要这个:

      >>> a = {1 : True, 2 : False, 3 : True, 4 : False}
      >>> import random
      >>> for key in a:
      ...     val = random.choice([True, False])
      ...     a[key] = val
      ...
      >>> a
      {1: True, 2: True, 3: True, 4: False}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-12
        • 1970-01-01
        • 1970-01-01
        • 2013-09-07
        相关资源
        最近更新 更多