字典中 return 个值的函数
Function to return values in dictionary
这是我的词典:
seven_segment = {'0': {'a','c','d','e','b','f'},
'1': {'c','b'},
'2': {'a','d','e','b','g'},
'3': {'a','c','d','b','g'},
'4': {'g','c','f','b'},
'5': {'a','c','d','g','f'},
'6': {'a','c','d','e','g','f'},
'7': {'a','c','b'},
'8': {'a','c','d','e','b','g','f'},
'9': {'a','c','d','b','g','f'}}
我创建了一个函数:
def guess_damaged(display, state, damaged):
sorted_state = ''.join(sorted(state))
sorted_damaged = ''.join(sorted(damaged))
for key in display:
templist = list(display[key])
templist = sorted(templist)
templist = ''.join(templist)
if(templist == sorted_state):
return {key for key,value in display.items() if all(sorted_damaged in value for sorted_damaged in sorted_state)}
print(guess_damaged(seven_segment, 'adeg', 'bf'))
print(guess_damaged(seven_segment, 'abed', 'cf'))
print(guess_damaged(seven_segment, '', 'abcdefg'))
我当前的输出如下图:
None
None
None
然而,这是我想要的输出:
{'2'}
{'0'}
{'4', '5', '1', '8', '7', '6', '3', '0', '2', '9'}
如何获得所需的输出?
seven_segment 字典中没有等于 'adeg' 或 'abed' 或 '' 的值,因此带有 "if (templist == sorted_state):" 的行永远不会为真
解决方案
我想这就是你想要的:
seven_segment = {'0': {'a', 'c', 'd', 'e', 'b', 'f'},
'1': {'c', 'b'},
'2': {'a', 'd', 'e', 'b', 'g'},
'3': {'a', 'c', 'd', 'b', 'g'},
'4': {'g', 'c', 'f', 'b'},
'5': {'a', 'c', 'd', 'g', 'f'},
'6': {'a', 'c', 'd', 'e', 'g', 'f'},
'7': {'a', 'c', 'b'},
'8': {'a', 'c', 'd', 'e', 'b', 'g', 'f'},
'9': {'a', 'c', 'd', 'b', 'g', 'f'}}
def guess_damaged(display, state, damaged):
return {
key
for key, value in display.items()
if set(state) == (value - set(damaged))
}
print(guess_damaged(seven_segment, 'adeg', 'bf'))
print(guess_damaged(seven_segment, 'abed', 'cf'))
print(guess_damaged(seven_segment, '', 'abcdefg'))
输出:
{'2'}
{'0'}
{'7', '1', '5', '0', '9', '4', '2', '6', '3', '8'}
说明
set
是非常强大的内置 class。 reference page about set
您可以执行 set
:
- 联合(
|
)
- 相交(
&
)
- 差异(
-
)
- 对称差(
^
)
- 子集关系(
<=
, <
, >
, >=
)
- 相等(
==
, !=
)
这是我的词典:
seven_segment = {'0': {'a','c','d','e','b','f'},
'1': {'c','b'},
'2': {'a','d','e','b','g'},
'3': {'a','c','d','b','g'},
'4': {'g','c','f','b'},
'5': {'a','c','d','g','f'},
'6': {'a','c','d','e','g','f'},
'7': {'a','c','b'},
'8': {'a','c','d','e','b','g','f'},
'9': {'a','c','d','b','g','f'}}
我创建了一个函数:
def guess_damaged(display, state, damaged):
sorted_state = ''.join(sorted(state))
sorted_damaged = ''.join(sorted(damaged))
for key in display:
templist = list(display[key])
templist = sorted(templist)
templist = ''.join(templist)
if(templist == sorted_state):
return {key for key,value in display.items() if all(sorted_damaged in value for sorted_damaged in sorted_state)}
print(guess_damaged(seven_segment, 'adeg', 'bf'))
print(guess_damaged(seven_segment, 'abed', 'cf'))
print(guess_damaged(seven_segment, '', 'abcdefg'))
我当前的输出如下图:
None
None
None
然而,这是我想要的输出:
{'2'}
{'0'}
{'4', '5', '1', '8', '7', '6', '3', '0', '2', '9'}
如何获得所需的输出?
seven_segment 字典中没有等于 'adeg' 或 'abed' 或 '' 的值,因此带有 "if (templist == sorted_state):" 的行永远不会为真
解决方案
我想这就是你想要的:
seven_segment = {'0': {'a', 'c', 'd', 'e', 'b', 'f'},
'1': {'c', 'b'},
'2': {'a', 'd', 'e', 'b', 'g'},
'3': {'a', 'c', 'd', 'b', 'g'},
'4': {'g', 'c', 'f', 'b'},
'5': {'a', 'c', 'd', 'g', 'f'},
'6': {'a', 'c', 'd', 'e', 'g', 'f'},
'7': {'a', 'c', 'b'},
'8': {'a', 'c', 'd', 'e', 'b', 'g', 'f'},
'9': {'a', 'c', 'd', 'b', 'g', 'f'}}
def guess_damaged(display, state, damaged):
return {
key
for key, value in display.items()
if set(state) == (value - set(damaged))
}
print(guess_damaged(seven_segment, 'adeg', 'bf'))
print(guess_damaged(seven_segment, 'abed', 'cf'))
print(guess_damaged(seven_segment, '', 'abcdefg'))
输出:
{'2'}
{'0'}
{'7', '1', '5', '0', '9', '4', '2', '6', '3', '8'}
说明
set
是非常强大的内置 class。 reference page about set
您可以执行 set
:
- 联合(
|
) - 相交(
&
) - 差异(
-
) - 对称差(
^
) - 子集关系(
<=
,<
,>
,>=
) - 相等(
==
,!=
)