将列表解析为地图
Parsing a list into a map
我从 plug
`conn.req_headers:
得到以下回复
[
{"accept",
"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"},
{"accept-encoding", "gzip, deflate, br"},
{"accept-language", "en-GB,en;q=0.9,fr;q=0.8"},
{"cache-control", "max-age=0"},
{"connection", "keep-alive"},
{"cookie",
"_xsrf=2|353a732a|e6f0e245b4f4617b78f5080f716b5a83|1548858283; username-localhost-8888=\"2|1:0|10:1548926887|23:username-localhost-8888|44:MjlmNjg1MmMwMTA5NGZlNjllM2FmNzg0YmFlMDM4ZTY=|b5777f2478a76e40e5d2a194c35a6dc49771b5522513299099e9baf47d7c0975\"; _shortr_key=SFMyNTY.g3QAAAABbQAAAAtfY3NyZl90b2tlbm0AAAAYcnEvMWJQRE1OSVROSG1JOXRDY1VrUT09.SAlNvN6U9ol3ldsUP2qjlVXTJgvtLdSUzjBkAuuW5NM"},
{"host", "localhost:4000"},
{"referer", "http://localhost:4000/links"},
{"upgrade-insecure-requests", "1"},
{"user-agent",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.81 Safari/537.36"}
]
我需要将其转换为地图(以发送到 ecto),这样 %{"accept" => "...", ...}
在python我会做类似
的事情
{v[0]: v[1] for v in original_list}
Elixir有这么漂亮的东西吗?
使用Enum#into/2:
Inserts the given enumerable into a collectable.
例如(有关更多示例,请参阅文档):
iex> [{"foo", "bar"}, {"fizz"}, {"buzz"}] |> Enum.into(%{})
%{"foo" => "bar", "fizz" => "buzz"}
你的情况:
iex(1)> [
...(1)> {"accept",
...(1)> "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"},
...(1)> {"accept-encoding", "gzip, deflate, br"},
...(1)> {"accept-language", "en-GB,en;q=0.9,fr;q=0.8"},
...(1)> {"cache-control", "max-age=0"},
...(1)> {"connection", "keep-alive"},
...(1)> {"cookie",
...(1)> "_xsrf=2|353a732a|e6f0e245b4f4617b78f5080f716b5a83|1548858283; username-localhost-8888=\"2|1:0|10:1548926887|23:username-localhost-8888|44:MjlmNjg1MmMwMTA5NGZlNjllM2FmNzg0YmFlMDM4ZTY=|b5777f2478a76e40e5d2a194c35a6dc49771b5522513299099e9baf47d7c0975\"; _shortr_key=SFMyNTY.g3QAAAABbQAAAAtfY3NyZl90b2tlbm0AAAAYcnEvMWJQRE1OSVROSG1JOXRDY1VrUT09.SAlNvN6U9ol3ldsUP2qjlVXTJgvtLdSUzjBkAuuW5NM"},
...(1)> {"host", "localhost:4000"},
...(1)> {"referer", "http://localhost:4000/links"},
...(1)> {"upgrade-insecure-requests", "1"},
...(1)> {"user-agent",
...(1)> "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.81 Safari/537.36"}
...(1)> ] |> Enum.into(%{})
%{
"accept" => "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"accept-encoding" => "gzip, deflate, br",
"accept-language" => "en-GB,en;q=0.9,fr;q=0.8",
"cache-control" => "max-age=0",
"connection" => "keep-alive",
"cookie" => "_xsrf=2|353a732a|e6f0e245b4f4617b78f5080f716b5a83|1548858283; username-localhost-8888=\"2|1:0|10:1548926887|23:username-localhost-8888|44:MjlmNjg1MmMwMTA5NGZlNjllM2FmNzg0YmFlMDM4ZTY=|b5777f2478a76e40e5d2a194c35a6dc49771b5522513299099e9baf47d7c0975\"; _shortr_key=SFMyNTY.g3QAAAABbQAAAAtfY3NyZl90b2tlbm0AAAAYcnEvMWJQRE1OSVROSG1JOXRDY1VrUT09.SAlNvN6U9ol3ldsUP2qjlVXTJgvtLdSUzjBkAuuW5NM",
"host" => "localhost:4000",
"referer" => "http://localhost:4000/links",
"upgrade-insecure-requests" => "1",
"user-agent" => "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.81 Safari/537.36"
}
您也可以使用Map.new
https://hexdocs.pm/elixir/Map.html#new/1
iex> [{"foo", "bar"}, {"fizz", "buzz"}] |> Map.new
%{"fizz" => "buzz", "foo" => "bar"}
我从 plug
`conn.req_headers:
[
{"accept",
"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"},
{"accept-encoding", "gzip, deflate, br"},
{"accept-language", "en-GB,en;q=0.9,fr;q=0.8"},
{"cache-control", "max-age=0"},
{"connection", "keep-alive"},
{"cookie",
"_xsrf=2|353a732a|e6f0e245b4f4617b78f5080f716b5a83|1548858283; username-localhost-8888=\"2|1:0|10:1548926887|23:username-localhost-8888|44:MjlmNjg1MmMwMTA5NGZlNjllM2FmNzg0YmFlMDM4ZTY=|b5777f2478a76e40e5d2a194c35a6dc49771b5522513299099e9baf47d7c0975\"; _shortr_key=SFMyNTY.g3QAAAABbQAAAAtfY3NyZl90b2tlbm0AAAAYcnEvMWJQRE1OSVROSG1JOXRDY1VrUT09.SAlNvN6U9ol3ldsUP2qjlVXTJgvtLdSUzjBkAuuW5NM"},
{"host", "localhost:4000"},
{"referer", "http://localhost:4000/links"},
{"upgrade-insecure-requests", "1"},
{"user-agent",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.81 Safari/537.36"}
]
我需要将其转换为地图(以发送到 ecto),这样 %{"accept" => "...", ...}
在python我会做类似
的事情{v[0]: v[1] for v in original_list}
Elixir有这么漂亮的东西吗?
使用Enum#into/2:
Inserts the given enumerable into a collectable.
例如(有关更多示例,请参阅文档):
iex> [{"foo", "bar"}, {"fizz"}, {"buzz"}] |> Enum.into(%{})
%{"foo" => "bar", "fizz" => "buzz"}
你的情况:
iex(1)> [
...(1)> {"accept",
...(1)> "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8"},
...(1)> {"accept-encoding", "gzip, deflate, br"},
...(1)> {"accept-language", "en-GB,en;q=0.9,fr;q=0.8"},
...(1)> {"cache-control", "max-age=0"},
...(1)> {"connection", "keep-alive"},
...(1)> {"cookie",
...(1)> "_xsrf=2|353a732a|e6f0e245b4f4617b78f5080f716b5a83|1548858283; username-localhost-8888=\"2|1:0|10:1548926887|23:username-localhost-8888|44:MjlmNjg1MmMwMTA5NGZlNjllM2FmNzg0YmFlMDM4ZTY=|b5777f2478a76e40e5d2a194c35a6dc49771b5522513299099e9baf47d7c0975\"; _shortr_key=SFMyNTY.g3QAAAABbQAAAAtfY3NyZl90b2tlbm0AAAAYcnEvMWJQRE1OSVROSG1JOXRDY1VrUT09.SAlNvN6U9ol3ldsUP2qjlVXTJgvtLdSUzjBkAuuW5NM"},
...(1)> {"host", "localhost:4000"},
...(1)> {"referer", "http://localhost:4000/links"},
...(1)> {"upgrade-insecure-requests", "1"},
...(1)> {"user-agent",
...(1)> "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.81 Safari/537.36"}
...(1)> ] |> Enum.into(%{})
%{
"accept" => "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"accept-encoding" => "gzip, deflate, br",
"accept-language" => "en-GB,en;q=0.9,fr;q=0.8",
"cache-control" => "max-age=0",
"connection" => "keep-alive",
"cookie" => "_xsrf=2|353a732a|e6f0e245b4f4617b78f5080f716b5a83|1548858283; username-localhost-8888=\"2|1:0|10:1548926887|23:username-localhost-8888|44:MjlmNjg1MmMwMTA5NGZlNjllM2FmNzg0YmFlMDM4ZTY=|b5777f2478a76e40e5d2a194c35a6dc49771b5522513299099e9baf47d7c0975\"; _shortr_key=SFMyNTY.g3QAAAABbQAAAAtfY3NyZl90b2tlbm0AAAAYcnEvMWJQRE1OSVROSG1JOXRDY1VrUT09.SAlNvN6U9ol3ldsUP2qjlVXTJgvtLdSUzjBkAuuW5NM",
"host" => "localhost:4000",
"referer" => "http://localhost:4000/links",
"upgrade-insecure-requests" => "1",
"user-agent" => "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.81 Safari/537.36"
}
您也可以使用Map.new
https://hexdocs.pm/elixir/Map.html#new/1
iex> [{"foo", "bar"}, {"fizz", "buzz"}] |> Map.new
%{"fizz" => "buzz", "foo" => "bar"}