質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Q&A

解決済

1回答

668閲覧

typescriptの辞書とリストの変換の書き方

sasaki0628

総合スコア106

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

0グッド

1クリップ

投稿2023/01/26 09:26

編集2023/01/26 23:59

pythonで書いたコードをtypescriptで書き直そうとしていますが、書き方がわからないため教えていただきたいです。

変更前データ

data = [ { "id": "い", "fruits": "apple", "cd": 1 }, { "id": "い", "fruits": "apple", "cd": 2 }, { "id": "い", "fruits": "apple", "cd": 4 }, { "id": "ろ", "fruits": "banana", "cd": 5 }, { "id": "は", "fruits": "grape", "cd": 3 }, { "id": "は", "fruits": "grape", "cd": 6 }, { "id": "は", "fruits": "grape", "cd": 7 }, ]

変更後データ(この形に変更をしたい)

result = { "い": [ { "id": "い", "fruits": "apple", "cd": 1 }, { "id": "い", "fruits": "apple", "cd": 2 }, { "id": "い", "fruits": "apple", "cd": 4 } ], "ろ": [ { "id": "ろ", "fruits": "banana", "cd": 5 } ], "は": [ { "id": "は", "fruits": "grape", "cd": 3 }, { "id": "は", "fruits": "grape", "cd": 6 }, { "id": "は", "fruits": "grape", "cd": 7 } ] }

作成したpythonのコード

data = [ { "id": "い", "fruits": "apple", "cd": 1 }, { "id": "い", "fruits": "apple", "cd": 2 }, { "id": "い", "fruits": "apple", "cd": 4 }, { "id": "ろ", "fruits": "banana", "cd": 5 }, { "id": "は", "fruits": "grape", "cd": 3 }, { "id": "は", "fruits": "grape", "cd": 6 }, { "id": "は", "fruits": "grape", "cd": 7 }, ] result = {} for w in data: result.setdefault(w['id'], []).append(w) print(result)

pythonの出力結果(期待通りに出力できている)

>>> print(result) {'い': [{'id': 'い', 'fruits': 'apple', 'cd': 1}, {'id': 'い', 'fruits': 'apple', 'cd': 2}, {'id': 'い', 'fruits': 'apple', 'cd': 4}], 'ろ': [{'id': 'ろ', 'fruits': 'banana', 'cd': 5}], 'は': [{'id': 'は', 'fruits': 'grape', 'cd': 3}, {'id': 'は', 'fruits': 'grape', 'cd': 6}, {'id': 'は', 'fruits': 'grape', 'cd': 7}]}

作成中のtypescriptのコード

const data = [ { "id": "い", "fruits": "apple", "cd": 1 }, { "id": "い", "fruits": "apple", "cd": 2 }, { "id": "い", "fruits": "apple", "cd": 4 }, { "id": "ろ", "fruits": "banana", "cd": 5 }, { "id": "は", "fruits": "grape", "cd": 3 }, { "id": "は", "fruits": "grape", "cd": 6 }, { "id": "は", "fruits": "grape", "cd": 7 }, ] const result: { [id: string]: {}} = {}; data.map(x => result[x.id] = x); console.log(result)

typescriptのコードの出力結果

{ 'い': { id: 'い', fruits: 'apple', cd: 4 }, 'ろ': { id: 'ろ', fruits: 'banana', cd: 5 }, 'は': { id: 'は', fruits: 'grape', cd: 7 } }

pythonで書いたコードのように、先に辞書にキーだけを追加し、そのキーに辞書を紐づけたいのですが、typescriptの書き方がわかりません。

※文章がわかりにくかったため、修正しました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

meg_

2023/01/26 10:58

> 出力結果 とはどれをどうしたときの結果でしょうか?
sasaki0628

2023/01/26 23:55

作成中のtypescriptのコードの出力結果です。
guest

回答1

0

ベストアンサー

以下だとオブジェクトがオブジェクトを持つ定義になってしまってますね
やりたいのはオブジェクトが配列を持ち、その配列がオブジェクトを持つ構成じゃないでしょうか

ts

1const result: { [id: string]: {}} = {};

あとpythonでは for + append で実現しているのに typescript では map でやっているのが何故なのかなと
同じように foreach + push してはいかがでしょうか

ts

1const data = [ 2 { 3 "id": "い", 4 "fruits": "apple", 5 "cd": 1 6 }, 7 { 8 "id": "い", 9 "fruits": "apple", 10 "cd": 2 11 }, 12 { 13 "id": "い", 14 "fruits": "apple", 15 "cd": 4 16 }, 17 { 18 "id": "ろ", 19 "fruits": "banana", 20 "cd": 5 21 }, 22 { 23 "id": "は", 24 "fruits": "grape", 25 "cd": 3 26 }, 27 { 28 "id": "は", 29 "fruits": "grape", 30 "cd": 6 31 }, 32 { 33 "id": "は", 34 "fruits": "grape", 35 "cd": 7 36 }, 37] 38 39 40export interface Item { 41 id: string; 42 fruits: string; 43 cd: number; 44} 45 46const result: { [id: string]: Item[]} = {}; 47 48data.forEach(function(element){ 49 if(!result[element.id]) { 50 result[element.id] = [] 51 } 52 result[element.id].push(element) 53}) 54 55console.log(result) 56 57// { 58// 'い': [ 59// { id: 'い', fruits: 'apple', cd: 1 }, 60// { id: 'い', fruits: 'apple', cd: 2 }, 61// { id: 'い', fruits: 'apple', cd: 4 } 62// ], 63// 'ろ': [ { id: 'ろ', fruits: 'banana', cd: 5 } ], 64// 'は': [ 65// { id: 'は', fruits: 'grape', cd: 3 }, 66// { id: 'は', fruits: 'grape', cd: 6 }, 67// { id: 'は', fruits: 'grape', cd: 7 } 68// ] 69// } 70

投稿2023/01/27 02:08

yuma.inaura

総合スコア1453

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sasaki0628

2023/01/27 05:42

ありがとうございます。typescriptの初心者で、いろいろと書き方がわかりませんでした。勉強になります。
sasaki0628

2023/01/27 08:07

重ねて質問申し訳ございません、「cd」が配列のときに出力がうまくできないのですが、どう修正すればよいでしょうか。 const data = [ { "id": "い", "fruits": "apple", "cd": [1,1] }, { "id": "い", "fruits": "apple", "cd": [2,3,4] }, { "id": "い", "fruits": "apple", "cd": [4,2] }, { "id": "ろ", "fruits": "banana", "cd": [5,6] }, { "id": "は", "fruits": "grape", "cd": [3] }, { "id": "は", "fruits": "grape", "cd": [6,9] }, { "id": "は", "fruits": "grape", "cd": [7,8] }, ] export interface Item { id: string; fruits: string; cd: number[]; } const result: { [id: string]: Item[]} = {}; data.forEach(function(element){ if(!result[element.id]) { result[element.id] = [] } result[element.id].push(element) }) console.log(result) 出力結果 { 'い': [ { id: 'い', fruits: 'apple', cd: [Array] }, { id: 'い', fruits: 'apple', cd: [Array] }, { id: 'い', fruits: 'apple', cd: [Array] } ], 'ろ': [ { id: 'ろ', fruits: 'banana', cd: [Array] } ], 'は': [ { id: 'は', fruits: 'grape', cd: [Array] }, { id: 'は', fruits: 'grape', cd: [Array] }, { id: 'は', fruits: 'grape', cd: [Array] } ] }
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問