用里面的字典列表迭代字典列表
Iterate over a list of dictionary with a list of dictionary inside
我正在玩弄一个简单的区块链。我想在我的代码中获取交易金额的总数,但是这个方法只有 returns 一个值!这是默认值。这是我的示例链。
"chain": [
{
"index": 1,
"previous_hash": "1",
"proof": 0,
"timestamp": "2021-07-13 12:46:27.100441",
"transactions": [
{
"amount": 0,
"reciver": "-",
"sender": "-"
}
]
},
{
"index": 2,
"previous_hash": "e267a3f77fe50af86466a9bc5fce5b8285cf3eff85260f402074505c6023a085",
"proof": 115558,
"timestamp": "2021-07-13 12:48:29.790718",
"transactions": [
{
"amount": 420.69,
"reciver": "John",
"sender": "Hoomehr"
},
{
"amount": 1142,
"reciver": "John",
"sender": "yaser"
},
{
"amount": 100,
"reciver": "Miner",
"sender": "01656f68288a45f993fc8c35c3d853d1"
}
]
},
{
"index": 3,
"previous_hash": "217a9bb5994943e03cef59edac125cc33c1831dce9d3ce8424ca134068e808b5",
"proof": 48245,
"timestamp": "2021-07-13 12:49:18.885861",
"transactions": [
{
"amount": 462,
"reciver": "Yaser",
"sender": "Hoomehr"
},
{
"amount": 32,
"reciver": "John",
"sender": "Hoomehr"
},
{
"amount": 100,
"reciver": "Miner",
"sender": "01656f68288a45f993fc8c35c3d853d1"
}
]
}
]
这是我的代码:
我试着遍历了每一层并做了一个for循环,同时我不知道我的语法是错误的还是正确的。
def total_trans(self):
balance=0
for i in self.chain:
for key , value in self.chain[0].items() :
for x in self.chain[0]['transactions']:
for k , v in self.chain[0]['transactions'][0].items():
balance += sum(self.chain[0]['transactions'][0]['amount'] for i in self.chain[0]['transactions'][0])
return balance
是的,您一直引用链中的第一项,而不是让 for 循环遍历数据。
试试这个:
def total_trans(self):
balance = 0.0
for i in self.chain:
for x in i['transactions']:
balance += x['amount']
return balance
根据您的数据,我得到 balance
作为 2256.69
返回
一般来说,当你有一个像这样深度嵌套的数据结构时,你应该编写你的程序,使它首先只有最外层的循环:for i in self.chain:
在你的例子中。然后你可以添加 print(i)
看看你有什么。然后你会意识到你在 transactions
之后,然后你继续前进,迭代其他东西并打印,直到你得到你想要的。
我把原始链变成了 python 字典。如果您从外部文件导入此 JSON 对象,您可以使用 JSON built in libray 将其反序列化为 Python 对象。
block_chain = {"chain": [
{
"index": 1,
"previous_hash": "1",
"proof": 0,
"timestamp": "2021-07-13 12:46:27.100441",
"transactions": [
{
"amount": 0,
"reciver": "-",
"sender": "-"
}
]
},
{
"index": 2,
"previous_hash": "e267a3f77fe50af86466a9bc5fce5b8285cf3eff85260f402074505c6023a085",
"proof": 115558,
"timestamp": "2021-07-13 12:48:29.790718",
"transactions": [
{
"amount": 420.69,
"reciver": "John",
"sender": "Hoomehr"
},
{
"amount": 1142,
"reciver": "John",
"sender": "yaser"
},
{
"amount": 100,
"reciver": "Miner",
"sender": "01656f68288a45f993fc8c35c3d853d1"
}
]
},
{
"index": 3,
"previous_hash": "217a9bb5994943e03cef59edac125cc33c1831dce9d3ce8424ca134068e808b5",
"proof": 48245,
"timestamp": "2021-07-13 12:49:18.885861",
"transactions": [
{
"amount": 462,
"reciver": "Yaser",
"sender": "Hoomehr"
},
{
"amount": 32,
"reciver": "John",
"sender": "Hoomehr"
},
{
"amount": 100,
"reciver": "Miner",
"sender": "01656f68288a45f993fc8c35c3d853d1"
}
]
}
]
}
然后嵌套循环提取每个“金额”并将其添加到返回的余额变量中:
def total_trans(block_chain):
balance = 0
chain = block_chain["chain"] # get chain (list of blocks)
for block in chain: # each element in array (block, type dict)
for trans in block["transactions"]: # get transactions key
balance += trans["amount"] # add each amaout for each transaction to the balance
return balance
print(total_trans(block_chain)) # returns : 2256.69
在您的 class 中,它看起来像:
def total_trans(self):
balance = 0
chain = self.block_chain["chain"] # get chain (list of blocks)
for block in chain: # each element in array (block, type dict)
for trans in block["transactions"]: # get transactions key
balance += trans["amount"] # add each amaout for each transaction to the balance
return balance
我正在玩弄一个简单的区块链。我想在我的代码中获取交易金额的总数,但是这个方法只有 returns 一个值!这是默认值。这是我的示例链。
"chain": [
{
"index": 1,
"previous_hash": "1",
"proof": 0,
"timestamp": "2021-07-13 12:46:27.100441",
"transactions": [
{
"amount": 0,
"reciver": "-",
"sender": "-"
}
]
},
{
"index": 2,
"previous_hash": "e267a3f77fe50af86466a9bc5fce5b8285cf3eff85260f402074505c6023a085",
"proof": 115558,
"timestamp": "2021-07-13 12:48:29.790718",
"transactions": [
{
"amount": 420.69,
"reciver": "John",
"sender": "Hoomehr"
},
{
"amount": 1142,
"reciver": "John",
"sender": "yaser"
},
{
"amount": 100,
"reciver": "Miner",
"sender": "01656f68288a45f993fc8c35c3d853d1"
}
]
},
{
"index": 3,
"previous_hash": "217a9bb5994943e03cef59edac125cc33c1831dce9d3ce8424ca134068e808b5",
"proof": 48245,
"timestamp": "2021-07-13 12:49:18.885861",
"transactions": [
{
"amount": 462,
"reciver": "Yaser",
"sender": "Hoomehr"
},
{
"amount": 32,
"reciver": "John",
"sender": "Hoomehr"
},
{
"amount": 100,
"reciver": "Miner",
"sender": "01656f68288a45f993fc8c35c3d853d1"
}
]
}
]
这是我的代码:
我试着遍历了每一层并做了一个for循环,同时我不知道我的语法是错误的还是正确的。
def total_trans(self):
balance=0
for i in self.chain:
for key , value in self.chain[0].items() :
for x in self.chain[0]['transactions']:
for k , v in self.chain[0]['transactions'][0].items():
balance += sum(self.chain[0]['transactions'][0]['amount'] for i in self.chain[0]['transactions'][0])
return balance
是的,您一直引用链中的第一项,而不是让 for 循环遍历数据。
试试这个:
def total_trans(self):
balance = 0.0
for i in self.chain:
for x in i['transactions']:
balance += x['amount']
return balance
根据您的数据,我得到 balance
作为 2256.69
一般来说,当你有一个像这样深度嵌套的数据结构时,你应该编写你的程序,使它首先只有最外层的循环:for i in self.chain:
在你的例子中。然后你可以添加 print(i)
看看你有什么。然后你会意识到你在 transactions
之后,然后你继续前进,迭代其他东西并打印,直到你得到你想要的。
我把原始链变成了 python 字典。如果您从外部文件导入此 JSON 对象,您可以使用 JSON built in libray 将其反序列化为 Python 对象。
block_chain = {"chain": [
{
"index": 1,
"previous_hash": "1",
"proof": 0,
"timestamp": "2021-07-13 12:46:27.100441",
"transactions": [
{
"amount": 0,
"reciver": "-",
"sender": "-"
}
]
},
{
"index": 2,
"previous_hash": "e267a3f77fe50af86466a9bc5fce5b8285cf3eff85260f402074505c6023a085",
"proof": 115558,
"timestamp": "2021-07-13 12:48:29.790718",
"transactions": [
{
"amount": 420.69,
"reciver": "John",
"sender": "Hoomehr"
},
{
"amount": 1142,
"reciver": "John",
"sender": "yaser"
},
{
"amount": 100,
"reciver": "Miner",
"sender": "01656f68288a45f993fc8c35c3d853d1"
}
]
},
{
"index": 3,
"previous_hash": "217a9bb5994943e03cef59edac125cc33c1831dce9d3ce8424ca134068e808b5",
"proof": 48245,
"timestamp": "2021-07-13 12:49:18.885861",
"transactions": [
{
"amount": 462,
"reciver": "Yaser",
"sender": "Hoomehr"
},
{
"amount": 32,
"reciver": "John",
"sender": "Hoomehr"
},
{
"amount": 100,
"reciver": "Miner",
"sender": "01656f68288a45f993fc8c35c3d853d1"
}
]
}
]
}
然后嵌套循环提取每个“金额”并将其添加到返回的余额变量中:
def total_trans(block_chain):
balance = 0
chain = block_chain["chain"] # get chain (list of blocks)
for block in chain: # each element in array (block, type dict)
for trans in block["transactions"]: # get transactions key
balance += trans["amount"] # add each amaout for each transaction to the balance
return balance
print(total_trans(block_chain)) # returns : 2256.69
在您的 class 中,它看起来像:
def total_trans(self):
balance = 0
chain = self.block_chain["chain"] # get chain (list of blocks)
for block in chain: # each element in array (block, type dict)
for trans in block["transactions"]: # get transactions key
balance += trans["amount"] # add each amaout for each transaction to the balance
return balance