Python - 辞書のForループ

okwaves2024-01-25  8

私は、多くのクラスターとその遺伝子に関する情報を含む大きな辞書を持っています。 「cdhitclusters」に関するデータの一部にアクセスしようとしています。コードのこのセクションは完璧に機能し、私がやりたいことを正確に実行します(クラスターごとの rep_gene の数をカウントします)。辞書内のすべてのクラスターに対してこれを行うための for ループの書き方がわかりません。

clus1 = (gene_clusters.get("cluster-1"))
cdhit1 = (clus1.get("cdhitclusters"))
rep1 = pd.DataFrame(cdhit1)
print(len(rep1.rep_gene))

辞書のセクションは次のとおりです。

{
    'cluster-1': {
        'BGCid': '-',
        'cdhitclusters': [
            {
                'genes': { 'AT1G24070': 100.0 },
                'rep_gene': 'AT1G24070'
            },
            {
                'genes': { 'AT1G24100': 100.0 },
                'rep_gene': 'AT1G24100'
            },
            {
                'genes': {
                    'AT1G24040': 100.0,
                    'AT1G2404_1': 100.0,
                    'AT1G2404_2': 100.0
                },
                'rep_gene': 'AT1G24040'
            },
            {
                'genes': {
                    'AT1G24020': 100.0,
                    'AT1G2402_1': 100.0
                },
                'rep_gene': 'AT1G24020'
            },
            {
                'genes': { 'AT1G24010': 100.0 },
                'rep_gene': 'AT1G24010'
            },
            {
                'genes': { 'AT1G24000': 100.0 },
                'rep_gene': 'AT1G24000'
            }
        ]
    ...

クラスターが 45 個あります。すべてのクラスターに対して上記のコードと同じ処理を実行するループを作成するにはどうすればよいですか?

より大きなデータ フレームに追加できるデータフレームに出力したいと考えています。これは私が使用しているコードですが、ループ内の最初のクラスターの CDhit のみを計算します。私の何が間違っているのでしょうか?

for clus in gene_clusters.values():
    cdhit = (clus.get("cdhitclusters"))
    rep = pd.DataFrame(cdhit)
    replen = rep.iloc[:,0]
    replen1 = len(rep.rep_gene)
    list = [replen1]    
    replen2 = pd.DataFrame(list, columns=['CDhits'])
    replen2 = replen2.CDhits

[gene_clusters[cluster]["cdhitclusters"] の hcluster は、gene_clusters] のクラスターに対して使用できますか?

– Rfroes87

2020 年 9 月 4 日 20:04



------------------------

キーを使用していないようなので、辞書のvalues()を反復処理するだけで済みます:

for clus in gene_clusters.values():
    cdhit = (clus.get("cdhitclusters"))
    rep = pd.DataFrame(cdhit)
    print(len(rep.rep_gene))



------------------------

このようなもの

for cluster_name, cluster_data in data.items():
print(f"Cluster Name: {cluster_name}")
print(f"BGCid: {cluster_data['BGCid']}")

for cdhitcluster in cluster_data['cdhitclusters']:
    print("CD-Hit Cluster:")
    
    for gene, percentage in cdhitcluster['genes'].items():
        print(f"Gene: {gene}, Percentage: {percentage}")



------------------------

この場合、簡単な方法は次のようになると思います。

for cluster in gene_clusters.keys():
   #your code

あなたが提供した辞書のセクションを試してみたところ、gene_clusters.keys() はまさにあなたが望んでいたもの、つまりクラスターのリストを生成しました。

総合生活情報サイト - OKWAVES
総合生活情報サイト - OKWAVES
生活総合情報サイトokwaves(オールアバウト)。その道のプロ(専門家)が、日常生活をより豊かに快適にするノウハウから業界の最新動向、読み物コラムまで、多彩なコンテンツを発信。