【问题标题】:Python - Printing String of Key in a DictPython - 在字典中打印键的字符串
【发布时间】:2013-01-22 21:43:26
【问题描述】:

我的代码如下,

prices = {'banana':'4', 'apple':'2', 'orange':'1.5', 'pear':'3'}
stock = {'banana':6, 'apple':0, 'orange':32, 'pear':15}

print(prices.keys)
print("price :" + str(prices.values))
print("stock :" + str(stock.values))

我不明白为什么我会吐出一个看起来好像我要求输入类型的东西。是什么赋予了?

其实我的代码逻辑是错误的。

我希望代码吐出以下内容

键 价格:价值 股票:价值

例如,它应该是这样的

苹果 价格:2 库存:0

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

    你需要调用方法来获得有用的东西:

    print (prices.keys())
    

    但是,在 python3.x 中,这仍然不是特别适合打印,因为它会打印您可能不想看到的额外垃圾。

    您可能要考虑对从dict.keys()dict.values() 返回的对象使用str.join

    print (' '.join(prices.keys()))
    

    str.join 几乎可以满足您的期望。左边的字符串是在您传递给join 的迭代中的每个元素之间插入的分隔符。例如:

    "!".join(["foo","bar","baz"])
    

    将产生字符串:"foo!bar!baz"。这里唯一的问题是传递给str.join 的迭代中的每个元素都必须是字符串。


    至于您的编辑,

    prices = {'banana':'4', 'apple':'2', 'orange':'1.5', 'pear':'3'}
    stock = {'banana':6, 'apple':0, 'orange':32, 'pear':15}
    prices.keys() & stock.keys()  #{'orange', 'pear', 'banana', 'apple'}
    for item in (prices.keys() & stock.keys()):
        print (item,"price:",prices[item],"stock:",stock[item])
    

    哪个输出:

    orange price: 1.5 stock: 32
    pear price: 3 stock: 15
    banana price: 4 stock: 6
    apple price: 2 stock: 0
    

    看来这就是你想要的。

    【讨论】:

    • 谢谢。我不熟悉加入。我现在去查一下。
    • 谢谢,但即使有修复,代码也没有像我想象的那样。你能看看我的编辑吗?
    • @algebr -- 我看到你在编辑。我不确定我是否理解您期望的输出。你能澄清一下你想要输出的帖子吗?
    • 太棒了!再次感谢你。但是代码的第 3 行,它是做什么的?它只是看起来像漂浮..?
    • @algebr -- 它是浮动的。我把它放在那里是为了演示dict1.keys() & dict2.keys() 的作用。在这种情况下,它的作用与dict1.keys() 几乎相同,因为您的字典具有相同的键——如果它们没有,它将返回两组键的交集。
    【解决方案2】:
    prices = {'banana':'4', 'apple':'2', 'pear':'3'}
    stock = {'banana':6, 'orange':32, 'pear':15}
    for item in (prices.keys() & stock.keys()):
        print (item,"price:",prices.get(item,'-'),"stock:",stock.get(item,0))
    

    生产

    orange price: - stock: 32
    pear price: 3 stock: 15
    banana price: 4 stock: 6
    apple price: 2 stock: 0
    

    如果股票和价格字典包含不同的水果(“键”),则默认使用 get 会有所帮助。 .get() 函数在这里真的很有帮助。

    正如 mgilson 所提到的,以下行是创建全套水果的位置。

    prices.keys() & stock.keys()  #{'orange', 'pear', 'banana', 'apple'}
    

    我之前也用 set 做过这个

    set(prices.keys().extend(stock.keys())
    

    但我更喜欢& 方法。

    【讨论】:

    • 为什么橙子不涨,苹果涨?
    • 啊,没关系,我刚用过 |而不是 & 并得到了我想要的结果。再次感谢您!
    【解决方案3】:

    前两个答案建议使用.keys(),但note that 这会返回dict_keys 类型的对象,而不是像字符串列表那样的可索引对象。要将键列表作为字符串获取,您只需将字典转换为列表:list(my_dict)

    >>> prices = {'banana':'4', 'apple':'2', 'pear':'3'}
    >>> print(prices.keys())
    dict_keys(['banana', 'apple', 'pear'])
    >>> prices.keys()[2]
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: 'dict_keys' object does not support indexing
    >>> print(list(prices))
    ['banana', 'apple', 'pear']
    >>> list(prices)[2]
    'pear'
    

    【讨论】:

      【解决方案4】:

      由于两个字典/对象具有相同的键,您可以使用简单的 for 循环遍历其中一个字典并打印每个项目的价格和库存。

      prices = {"banana": 4, "apple": 2, "orange": 1.5, "pear": 3}
      stock  = {"banana": 6, "apple": 0, "orange": 32, "pear": 15}
      for key in prices:
          print "stock: %s" % stock[key]
          print "prices: %s" % prices[key]
      

      【讨论】:

        【解决方案5】:
        prices = {"banana": 4, "apple": 2, "orange": 1.5, "pear": 3}
        stock  = {"banana": 6, "apple": 0, "orange": 32, "pear": 15}
        for key in prices:
            print key
            print "stock: %s" % stock[key]
            print "prices: %s" % prices[key]
        

        哪个输出:

        orange
        stock: 32
        prices: 1.5
        pear
        stock: 15
        prices: 3
        banana
        stock: 6
        prices: 4
        apple
        stock: 0
        prices: 2
        => None
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-05-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多