如何在字典键值对

时间:2016-06-23 14:03:43

标签: python dictionary

我是python的新手并且正在尝试创建一个以值为功能的字典。这是我的代码

import os

class Foo():
    def print1(self,n):
        print 5


    def print2(self,n):
        print 6

    def foo(self):
        bar = {'a': self.print1, 'b': self.print2}
        bar['b'](5)
        bar['a'](3)
        bar[os.environ['FOO']]()


f = Foo()
f.foo()

Traceback (most recent call last):
  File "test_dict.py", line 17, in <module>
   f.foo()
  File "test_dict.py", line 13, in foo
    bar[b]()

python test_dict.py 
6 
5  
   Traceback (most recent call last):
      File "test_dict.py", line 19, in <module>
       f.foo()
      File "test_dict.py", line 15, in foo
       bar[os.environ['FOO']]()
    TypeError: print2() takes exactly 2 arguments (1 given)

3 个答案:

答案 0 :(得分:1)

print1不会将函数存储为字典中的值。

它调用函数print2print并存储它们的返回值。由于这两项功能仅{'a': None, 'b': None }并且不会返回任何内容,因此您会收到字典NoneType,这就是您获得bar = {'a': self.print1, 'b': self.print2 }例外的原因。

相反,你应该这样做:

bar['b'](5) >> 5

然后:

df <- merge(DF1, DF2, by = c("date", "id"))
df$newcolumn <- ifelse(is.na(df$column.y), df$column.x, df$column.y, all.x = TRUE)

答案 1 :(得分:0)

试试这段代码:

class Foo():
    def print1(self,n):
        print 6

    def print2(self,n):
        print n

    def foo(self):
        bar = {'a': self.print1, 'b': self.print2 }
        bar['b'](5)
        bar['a'](3)

f = Foo()
f.foo()

它做你想要的。

答案 2 :(得分:-1)

你这样做,函数被调用并且结果被存储(因为你不返回任何内容,这是None),如果你想让函数可以这样调用,你可以写一个{围绕它{1}}或使用lambda