有人可以帮我阅读这个 Python 字典元组吗?我是 python 新手,我不能从中得到太多
Grammar = {'AB':('S', 'B'), 'BB':'A', 'a':'A', 'b':'B'}
注意:语法是上下文无关语法的语法。
有人可以帮我阅读这个 Python 字典元组吗?我是 python 新手,我不能从中得到太多
Grammar = {'AB':('S', 'B'), 'BB':'A', 'a':'A', 'b':'B'}
注意:语法是上下文无关语法的语法。
要将字典转换为您想要的内容,您可以执行以下操作:
>>> from collection import defaultdict
>>> grammar = {'AB':('S', 'B'), 'BB':'A', 'a':'A', 'b':'B'}
>>> tmp_result = defaultdict(list)
>>> def tuplify(val):
... if not isinstance(val, tuple):
... val = (val,)
... return val
...
>>> for key, value in grammar.items():
... values = tuplify(value)
... for val in values:
... tmp_result[val].append(key)
...
>>> tmp_result
defaultdict(<type 'list'>, {'A': ['a', 'BB'], 'S': ['AB'], 'B': ['AB', 'b']})
>>> result = {key:tuple(val) for key, val in tmp_result.items()}
>>> result
{'A': ('a', 'BB'), 'S': ('AB',), 'B': ('AB', 'b')}
其中类collections.defaultdict
是一个类似dict
的类,它使用工厂在缺少键时创建默认值。例如写作:
>>> D = defaultdict(list)
>>> D[5].append(3)
>>> D[5]
[3]
可以使用普通dict
的 s 来编写,例如:
>>> D = {}
>>> if 5 in D: # key present, use that value
... val = D[5]
... else: # otherwise create a default value and sets it
... val = list()
... D[5] = val
...
>>> val.append(3)
>>> D[5]
[3]
传递给的“工厂”defaultdict(factory)
可以是任何不接收参数的可调用对象,例如:
>>> n = 0
>>> def factory():
... global n
... print('Factory called!')
... n += 1
... return n #returns numbers 1, 2, 3, 4, ...
...
>>> D = defaultdict(factory)
>>> D[0]
Factory called!
1
>>> D[0] # the keys exists, thus the factory is not called.
1
>>> D[1]
Factory called!
2
>>> D[1]
2