我已经有了一个正常工作的代码,但我想改进它(如果有更好的方法)。
以下是此代码正在处理的数据结构的示例:
{u'error': [],
u'result': {u'T2JJER-DDEER-A3C45R': {u'cost': u'101.48810',
u'fee': u'0.27402',
u'margin': u'50.74405',
u'misc': u'',
u'oflags': u'',
u'ordertxid': u'O5HCKM-QMBW5-6F4UAB',
u'ordertype': u'limit',
u'pair': u'XXBTZEUR',
u'posstatus': u'open',
u'rollovertm': u'1519410923',
u'terms': u'0.0100% per 4 hours',
u'time': 1519396523.8057,
u'type': u'buy',
u'vol': u'0.10050000',
u'vol_closed': u'0.00000000'},
u'T4KPEJ-TKDDR-ZOP45C': {u'cost': u'101.38560',
u'fee': u'0.27374',
u'margin': u'50.69280',
u'misc': u'',
u'oflags': u'',
u'ordertxid': u'OU5NOD-L4KLX-AZINT7',
u'ordertype': u'limit',
u'pair': u'XXBTZEUR',
u'posstatus': u'open',
u'rollovertm': u'1519410923',
u'terms': u'0.0100% per 4 hours',
u'time': 1519396523.8057,
u'type': u'buy',
u'vol': u'0.10050000',
u'vol_closed': u'0.00000000'},
u'TWJP3K-ASTDW-CO7P3Z': {u'cost': u'101.23520',
u'fee': u'0.27333',
u'margin': u'50.61760',
u'misc': u'',
u'oflags': u'',
u'ordertxid': u'OUKPLC-IZTVW-ZMMFZH',
u'ordertype': u'limit',
u'pair': u'XXBTZEUR',
u'posstatus': u'open',
u'rollovertm': u'1519410923',
u'terms': u'0.0100% per 4 hours',
u'time': 1519396523.8057,
u'type': u'buy',
u'vol': u'0.10050000',
u'vol_closed': u'0.00000000'}}}
正如您所看到的,数据结构非常规律。我正在编写一个可以找到KEY的代码,该代码与给定的APIresponse['result'][KEY]['ordertxid']
这是我提出的代码(它包含数据结构,运行它只是将粘贴复制到python控制台中):
def search_dict(DC, MATCH):
for KEY in DC:
#print (KEY, DC[KEY]['ordertxid'])
if DC[KEY]['ordertxid'] == MATCH: return KEY
APIresponse = {u'result': {u'T4KPEJ-TKDDR-ZOP45C': {u'cost': u'101.38560', u'fee': u'0.27374', u'margin': u'50.69280', u'misc': u'', u'oflags': u'', u'ordertxid': u'OU5NOD-L4KLX-AZINT7', u'ordertype': u'limit', u'pair': u'XXBTZEUR', u'posstatus': u'open', u'rollovertm': u'1519410923', u'terms': u'0.0100% per 4 hours', u'time': 1519396523.8057, u'type': u'buy', u'vol': u'0.10050000', u'vol_closed': u'0.00000000'},
u'T2JJER-DDEER-A3C45R': {u'cost': u'101.48810', u'fee': u'0.27402', u'margin': u'50.74405', u'misc': u'', u'oflags': u'', u'ordertxid': u'O5HCKM-QMBW5-6F4UAB', u'ordertype': u'limit', u'pair': u'XXBTZEUR', u'posstatus': u'open', u'rollovertm': u'1519410923', u'terms': u'0.0100% per 4 hours', u'time': 1519396523.8057, u'type': u'buy', u'vol': u'0.10050000', u'vol_closed': u'0.00000000'},
u'TWJP3K-ASTDW-CO7P3Z': {u'cost': u'101.23520', u'fee': u'0.27333', u'margin': u'50.61760', u'misc': u'', u'oflags': u'', u'ordertxid': u'OUKPLC-IZTVW-ZMMFZH', u'ordertype': u'limit', u'pair': u'XXBTZEUR', u'posstatus': u'open', u'rollovertm': u'1519410923', u'terms': u'0.0100% per 4 hours', u'time': 1519396523.8057, u'type': u'buy', u'vol': u'0.10050000', u'vol_closed': u'0.00000000'}}, u'error': []}
print "Matching key is: %s" % search_dict(APIresponse['result'], "OU5NOD-L4KLX-AZINT7")
问题:有没有办法在没有for的情况下编写
search_dict
子程序 环?优选单线。
顺便说一句,我确实在网络和论坛上搜索了一个合适的解决方案。我找到了一个简单的平面字典的解决方案,但我不知道如何为嵌套字典扩展它。
这个单行程适用于简单的平面字典:
APIresponse = {u'result': {u'T4KPEJ-TKDDR-ZOP45C': u'OU5NOD-L4KLX-AZINT7',
u'T2JJER-DDEER-A3C45R': u'O5HCKM-QMBW5-6F4UAB',
u'TWJP3K-ASTDW-CO7P3Z': u'OUKPLC-IZTVW-ZMMFZH'}, u'error': []}
ORDERid = 'O5HCKM-QMBW5-6F4UAB'
TRADEid = [key for key, value in APIresponse['result'].items() if value == ORDERid]
print TRADEid
答案 0 :(得分:1)
如果你真的想要单行,你可以使用以下内容:
SELECT P.Name,
T.ThingName
FROM People P
LEFT OUTER JOIN PeopleThings PT ON P.PeopleID = PT.PeopleID
LEFT OUTER JOIN Things T ON PT.ThingID = T.ThingID;
答案 1 :(得分:0)
我实现的最终代码如下(与上面显示的简单平面字典的代码相同),它包含一行解决嵌套字典的反向搜索:
APIresponse = {u'result': {u'T4KPEJ-TKDDR-ZOP45C': {u'cost': u'101.38560', u'fee': u'0.27374', u'margin': u'50.69280', u'misc': u'', u'oflags': u'', u'ordertxid': u'OU5NOD-L4KLX-AZINT7', u'ordertype': u'limit', u'pair': u'XXBTZEUR', u'posstatus': u'open', u'rollovertm': u'1519410923', u'terms': u'0.0100% per 4 hours', u'time': 1519396523.8057, u'type': u'buy', u'vol': u'0.10050000', u'vol_closed': u'0.00000000'},
u'T2JJER-DDEER-A3C45R': {u'cost': u'101.48810', u'fee': u'0.27402', u'margin': u'50.74405', u'misc': u'', u'oflags': u'', u'ordertxid': u'O5HCKM-QMBW5-6F4UAB', u'ordertype': u'limit', u'pair': u'XXBTZEUR', u'posstatus': u'open', u'rollovertm': u'1519410923', u'terms': u'0.0100% per 4 hours', u'time': 1519396523.8057, u'type': u'buy', u'vol': u'0.10050000', u'vol_closed': u'0.00000000'},
u'TWJP3K-ASTDW-CO7P3Z': {u'cost': u'101.23520', u'fee': u'0.27333', u'margin': u'50.61760', u'misc': u'', u'oflags': u'', u'ordertxid': u'OUKPLC-IZTVW-ZMMFZH', u'ordertype': u'limit', u'pair': u'XXBTZEUR', u'posstatus': u'open', u'rollovertm': u'1519410923', u'terms': u'0.0100% per 4 hours', u'time': 1519396523.8057, u'type': u'buy', u'vol': u'0.10050000', u'vol_closed': u'0.00000000'}}, u'error': []}
ORDERid = 'O5HCKM-QMBW5-6F4UAB'
TRADEid = [key for key, value in APIresponse['result'].items() if value['ordertxid'] == ORDERid]
print TRADEid